我想在代码中实现一些线程,乍一看似乎工作正常。在检查了我的结果之后,我注意到该代码似乎不是在等待线程完成,而是只要它们开始,它就会继续执行其余的代码。
def start_local_process(pair):
try:
name = 'name'
some_other_function(name)
except:
print("Failed")
print("Starting a total of %d threading processes." %len(some_list))
for element in some_list:
t= Thread(target=start_local_process, args=(pair,))
t.start()
print("Closed all threading processes for " + element + "!")
我可以看到它确实为some_list中的每个元素启动了线程处理,这正是我想要的-对每个元素并行执行。但是,启动它们后,我会立即得到最后一条输出消息,我希望的是,如果它等待它们完成,然后打印一条消息,使其完成。有办法吗?
更新: 因此,这是给出部分解决方案的链接。回答一个线程是否仍处于活动状态的函数是.isAlive()
使用此函数,我可以知道线程是否仍处于活动状态,但是在所有函数都返回TRUE之前重新检查同一件事的巧妙方法是什么?
假设您将线程保存到列表中,则可以执行以下操作来检查所有线程是否都完成了工作:
finished = all(thread.isAlive() for thread in thread_list)
while not finished:
finished = all(thread.isAlive() for thread in thread_list)
print('All task finished...')
您是否认为sleep()命令会干扰线程?我不希望它继续询问是否完成,应该间隔一段时间。
您可以使用,
time.sleep
尽管我不确定您的程序如何运行。Python本身不支持parallelism
。实际上,一次只执行一个线程。从这个 SO线程看来,这应该不是问题。