如何让主线程在python中启动后等待内部线程?
我为此使用join
,但它无法正常工作,我认为这是因为内部线程调用了time.sleep()
。
有什么想法吗?
以下是代码的块框:
def execution(start,end):
for i in range (start,end):
main ()
return
def waitForThread(delay,my_threads):
time.sleep (delay)
for t in my_threads:
t.join ()
if t in my_threads:
my_threads.remove (t)
return
def task(user,sleep): # it has multiple time.sleep()
#do some actions
time.sleep()
#do some actions
time.sleep()
return
def main():
threads=[]
for user in accounts:
t = Thread (target=task,args=(sleep-time,user))
t.start ()
threads.append (t)
waitForThread (130,threads)
## I want the code stop here and when the execution of threads finished continue
## doing other staff here
return
if __name__ == '__main__':
execution(1,30)
答案 0 :(得分:2)
功能
if t in my_threads:
my_threads.remove (t)
看起来很可疑。特别是行
my_threads
这些行将从for
循环中的del
中删除元素,因此您不会等待所有线程完成。
如果删除这些行,代码将等待线程正确连接。然后,如果您认为需要删除主题,则可以在waitForThread
返回时执行此操作(例如,使用for
)。
实习课程是不修改您在git-bash.exe
循环中循环的元素列表 - 至少不是通过添加或删除元素。这通常会产生奇怪的效果。