join()线程没有在python中保存主线程

时间:2014-03-06 11:41:35

标签: multithreading python-2.7

我有一个通过循环调用线程的代码,如下所示:

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()他们将会发生什么?

一些要点:

  • 循环假设很长时间(几天)
  • 命令本身不是很长(几秒钟)

我正在使用线程进行性能测试,如果有人有更好的想法,我想尝试一下。

1 个答案:

答案 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

  

我甚至需要加入()吗?如果我不加入()他们会发生什么?

没有。您不需要加入它们。当主线程退出时,所有非守护线程都会自动连接。