亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

線程模塊和多處理模塊的比較

線程模塊和多處理模塊的比較

qq_花開花謝_0 2022-10-06 16:09:49
所以我試圖比較threading是更快還是multiprocessing。理論上,由于GIL,多處理應該比多線程更快,因為一次只運行一個線程。但是我得到了相反的結果,即線程比多處理花費的時間更少,我缺少什么請幫忙。下面是線程的代碼import threadingfrom queue import Queueimport timeprint_lock = threading.Lock()def exampleJob(worker):    time.sleep(10)      with print_lock:        print(threading.current_thread().name,worker)def threader():    while True:        worker = q.get()        exampleJob(worker)        q.task_done()q = Queue()for x in range(4):     t = threading.Thread(target=threader)     print(x)     t.daemon = True     t.start()start = time.time()for worker in range(8):    q.put(worker)q.join()print('Entire job took:',time.time() - start)下面是多處理的代碼import multiprocessing as mpimport timedef exampleJob(print_lock,worker):                 # function simulating some computation    time.sleep(10)    with print_lock:        print(mp.current_process().name,worker)def processor(print_lock,q):                       # function where process pick up the job    while True:        worker = q.get()        if worker is None: # flag to exit the process            break        exampleJob(print_lock,worker)if __name__ == '__main__':    print_lock = mp.Lock()    q = mp.Queue()    processes = [mp.Process(target=processor,args=(print_lock,q)) for _ in range(4)]    for process in processes:        process.start()        start = time.time()    for worker in range(8):        q.put(worker)    for process in processes:        q.put(None) # quit indicator    for process in processes:        process.join()    print('Entire job took:',time.time() - start)
查看完整描述

2 回答

?
呼如林

TA貢獻1798條經驗 獲得超3個贊

由于 GIL 的存在,僅當您執行計算密集型任務時,添加到 @zmbq 線程才會更慢。如果您的操作是 I/O 綁定的并且很少有其他類似的操作,那么線程肯定會更快,因為涉及的開銷更少。請參閱以下博客以更好地理解相同的內容。

作為數據科學家利用 Python 中的多處理和多線程

希望這可以幫助!


查看完整回答
反對 回復 2022-10-06
?
偶然的你

TA貢獻1841條經驗 獲得超3個贊

這不是一個適當的測試。time.sleep可能不會獲得 GIL,因此您正在運行并發線程與并發進程。線程更快,因為沒有啟動成本。

您應該在線程中執行一些計算,然后您會看到差異。


查看完整回答
反對 回復 2022-10-06
  • 2 回答
  • 0 關注
  • 149 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號