如何在Python中多次调用线程?

use*_*432 6 python multithreading

如果这是一个愚蠢的问题,我很抱歉.我试图使用多个类的多线程来完成不同的工作,这涉及多次在不同的时间调用这些多线程.但我不确定使用哪种方法.代码如下所示:

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  .
Run Code Online (Sandbox Code Playgroud)

我试图让所有WorkerList中的所有线程同时开始运行,或者至少在同一时间开始运行.一旦它们全部终止,我想再次调用所有线程.

如果没有循环,我可以使用.start; 但由于我只能开始一次线程,所以开始显然不适合这里.如果我使用run,似乎所有线程都按顺序启动,不仅是同一列表中的线程,还有来自不同列表的线程.

有人可以帮忙吗?

Adr*_*son 11

这里有很多误解:

  • 你只能启动一次线程的特定实例.但是在你的情况下,for循环遍历一个线程的不同实例,每个实例被分配给thread循环中的变量,所以start()在每个线程上调用方法都没有问题.(您可以将其视为变量threadThread()列表中实例化的对象的别名)

  • run()与以下内容不同join():调用run()执行就像顺序编程一样.该run()方法不会启动新线程,它只是执行方法中的语句,就像任何其他函数调用一样.

  • join()注意开始执行任何操作:它只等待一个线程完成.为了使join()线程正常工作,你必须先调用start()这个线程.

此外,您不应该在完成执行后重新启动线程:您必须重新创建线程对象才能再次启动它.让这个工作的一个解决方法是Thread.__init__()run()方法结束时调用.但是,我不建议这样做,因为这将禁止使用该join()方法来检测线程的执行结束.