我试图理解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第一个整数,而第二个线程不写任何数字
答案 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')