gpt4 book ai didi

python - 如何在 Python 中多次调用一个线程?

转载 作者:太空狗 更新时间:2023-10-29 22:08:29 24 4
gpt4 key购买 nike

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

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com