我有一个通过循环调用线程的代码,如下所示:
def SubmitData(data):
# creating the relevant command to execute
command = CreateCommand(data)
subprocess.call(command)
def Main():
while(True):
# generating some data
data = GetData()
MyThread = threading.Thread(target=SubmitData,args=(data,))
MyThread.start()
显然,我没有在主题上使用join()
。
我的问题是如何join()
那些线程而不让主线程等待它们?
我甚至需要join()
他们吗?如果我不join()
他们将会发生什么?
一些要点:
我正在使用线程进行性能测试,如果有人有更好的想法,我想尝试一下。
答案 0 :(得分:1)
Popen()
不会阻止。除非CreateCommand()
阻止,否则您可以在主线程中调用SubmitData()
:
from subprocess import Popen
processes = []
while True:
processes = [p for p in processes if p.poll() is None] # leave only running
processes.append(Popen(CreateCommand(GetData()))) # start a new one
我甚至需要加入()吗?如果我不加入()他们会发生什么?
没有。您不需要加入它们。当主线程退出时,所有非守护线程都会自动连接。