- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
如果这是一个愚蠢的问题,我很抱歉。我正在尝试使用多个类的多线程来完成不同的工作,这涉及在不同时间多次调用这些多线程。但我不确定使用哪种方法。代码如下所示:
class workers1(Thread):
def __init__(self):
Thread.__init__(self)
def run(self):
do some stuff
class workers2(Thread):
def __init__(self):
Thread.__init__(self)
def run(self):
do some stuff
class workers3(Thread):
def __init__(self):
Thread.__init__(self)
def run(self):
do some stuff
WorkerList1=[workers1(i) for i in range(X)]
WorkerList2=[workers2(i) for i in range(XX)]
WorkerList2=[workers3(i) for i in range(XXX)]
while True:
for thread in WorkerList1:
thread.run (start? join? or?)
for thread in WorkerList2:
thread.run (start? join? or?)
for thread in WorkerList3:
thread.run (start? join? or?)
do sth .
我试图让所有 WorkerList 中的所有线程同时开始运行,或者至少大约同时开始。一段时间后,一旦它们全部终止,我想再次调用所有线程。
如果没有循环,我可以直接使用.start;但是因为我只能启动一个线程一次,所以启动显然不适合这里。如果我使用run,似乎所有线程都是顺序启动的,不仅是同一个列表中的线程,还有来自不同列表的线程。
有人可以帮忙吗?
最佳答案
这里有很多误解:
您只能启动一个线程的特定实例一次。但在您的情况下,for 循环在线程的不同实例上循环,每个实例都被分配给循环中的变量 thread
,因此调用 start 完全没有问题()
方法覆盖每个线程。 (您可以将其视为变量 thread
是列表中实例化的 Thread()
对象的别名)
run()
与 join()
不同:调用 run()
就像您在顺序编程一样. run()
方法不会启动新线程,它只是执行方法中的语句,就像任何其他函数调用一样。
join()
不会开始执行任何事情:它只会等待一个线程完成。为了让 join()
为线程正常工作,您必须先在该线程上调用 start()
。
此外,您应该注意,线程一旦完成执行就无法重新启动:您必须重新创建线程对象才能再次启动它。一种解决方法是在 run()
方法的末尾调用 Thread.__init__()
。但是,我不建议这样做,因为这将不允许使用 join()
方法来检测线程执行的结束。
关于python - 如何在 Python 中多次调用一个线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4122188/
我是一名优秀的程序员,十分优秀!