python threading 無法並行問題
阿新 • • 發佈:2018-12-20
程式碼如下:
for _i in range(8): t = threading.Thread(target=main,args=(clienLog,)) t.setDaemon(True) t.start() t.join()
這是因為對join理解有偏差的原因導致的,join ()方法:主執行緒A中,建立了子執行緒B,並且在主執行緒A中呼叫了B.join(),那麼,主執行緒A會在呼叫的地方等待,直到子執行緒B完成操作後,才可以接著往下執行,那麼在呼叫這個執行緒時可以使用被呼叫執行緒的join方法
因此啟動第一執行緒後會在主執行緒中等待第一個執行緒完成才會往後執行,這樣的話這個多執行緒就變成了單執行緒
應該寫成
ts = [] for _i in range(8): t = threading.Thread(target=main,args=(clienLog,)) ts.append(t) t.setDaemon(True) t.start() for t in ts: t.join()
如果執行緒中有while Ture的迴圈的時候無法ctrl+c退出程式,
可以寫成下面這樣:
try: for _i in range(8): t = threading.Thread(target=main,args=(clienLog,)) t.setDaemon(True) t.start()#t.join() while True: time.sleep(5) except KeyboardInterrupt: print('quit')
也可以將兩者結合,沒有對比sleep和join哪個效能更優