线程化:完成作业之前的线程退出

时间:2016-11-02 09:28:02

标签: python multithreading

我试图理解python线程的“守护进程”标志。 我知道

  

线程可以标记为“守护程序线程”。这个的意义   flag是只有守护进程线程时整个Python程序退出   离开了。初始值继承自创建线程。

但在我的情况下,python程序在保留守护程序线程并且线程没有完成其工作之前退出。

def ThreadDecorator(f):
    def wrap(*args,**kargs):
        t=Thread(target=f,args=args,kwargs=kargs)
        t.daemon=True
        t.start()
return wrap

@ThreadDecorator
def runSomething(*args,**kwargs):
    i = 0
    attente = 0
    fileName=kwargs['file']
    f=open(fileName,'wt')
    while i < 50000:
        f.write(str(i)+"\n")
        # attente += 0.2
        # attente += random.randint(1, 60) / 100
        # time.sleep(attente)
        i += 1
    f.close()
    return "Finished"

主程序

runSomething("5",file='test1.txt')
runSomething("6",file='test2.txt')

第一个线程只写5000第一个整数,而第二个线程不写任何数字

1 个答案:

答案 0 :(得分:0)

我觉得主要块应该包含pool。 完成所有线程后,可以调用pool.close()来确保所有线程都已完成执行。

from multiprocessing import Pool
from datetime import datetime

pool = Pool(processes = 2)
num_workers = 2
curr_worker = 1
val = 5
if (curr_worker < num_workers ):
    file_name = 'test'+str(curr_worker)+'.txt'
    pool.apply_async(run_Something,args=(val,file_name,)))
    curr_worker += 1
    val += 1
else:
    pool.close()
    pool.join()
    curr_worker = 1
    val = 5
print ("Workers returned result", datetime.now().strftime('%Y-%m-%d %H:%M:%S'))

启动守护程序线程后主要退出。 由于守护程序线程在非守护程序main终止时停止,因此我们看到只有test1.txt有5000条记录。

main的任务是启动下面的帖子,它将退出:

runSomething("5",file='test1.txt')
runSomething("6",file='test2.txt')