在Python中动态创建函数和线程
我有一个数组充满了命令,我想同时执行所有的命令。在Python中动态创建函数和线程
到目前为止,我有:
import threading
...
def MyThread0():
exec commandArray[0]
def MyThread1():
exec commandArray[1]
t1 = threading.Thread(target=MyThread0(), args=[]).start()
t2 = threading.Thread(target=MyThread1(), args=[]).start()
虽然这仍然是可以接受的,如果只有两个线程(它似乎工作,至少),它肯定不是,如果commandArray的长度是未知在运行时。我如何高效地为x个线程执行此操作?
PS:这是完全可能的,因为我是多线程新手,所有这些都是垃圾。建设性的批评是高度赞赏。
如果我正确理解你的问题,它应该是这样的:
import threading
...
def run_it_boy(index):
exec command_array[index]
for i in range(number_of_commands):
t[i] = threading.Thread(target=run_it_boy, args=(i,))
t[i].start()
需要注意的是:
- 的通行证
run_it_boy
代替run_it_boy()
,因为你不想现在就调用它,但让线程模块去做。 - 鼓励将
snake_case
用于函数/方法名称和变量名称,CamelCase
用于类名称。
替代
在我看来,最好是使用一种叫做线程池。
'.start()'不返回任何东西,所以赋值是无用的。 – DeepSpace
@DeepSpace谢谢 – BornToCode
对于初学者来说,创建线程时不希望()
在函数名称后面。这将在该行被评估之前调用该函数。
其次,.start()
不会返回任何内容,因此您对t1
和t2
的分配无用。
你可以做的是什么,而且是更加动态,然后你的代码,是沿着这些线路的东西:
import threading
def func1():
pass
def func2():
pass
def func3():
pass
funcs_to_run = [func1, func2, func3]
threads = [threading.Thread(target=func, args=[]) for func in funcs_to_run]
这是假设,当然,你希望每个线程执行不同的功能。
然后启动线程:
for thread in threads:
thread.start()
这并没有丝毫解决我的问题,我不认为你完全理解我的问题。我不想写出这些函数/线程,因为我不知道我需要多少(例如,你使用3,但也可能是20)。 – VeronicaLatLng
对于初学者来说,你不希望'()'创建线程时的函数的名字后。这将在该行被评估之前调用该函数。 – DeepSpace