我的問(wèn)題相當(dāng)簡(jiǎn)單:如果我有一段代碼,其中有一個(gè)迭代 150 次的 for 循環(huán)。將其分成 3 個(gè)文件,每個(gè)文件循環(huán)迭代 50 次是不是更快?如果是這樣,我是同時(shí)運(yùn)行 3 個(gè)代碼還是一次運(yùn)行一個(gè)?另一種選擇可能是multiprocessing在這 3 個(gè)文件中使用 python,但出現(xiàn)了同樣的問(wèn)題,我是一次性運(yùn)行它們還是一次運(yùn)行一個(gè)?
1 回答

白衣非少年
TA貢獻(xiàn)1155條經(jīng)驗(yàn) 獲得超0個(gè)贊
這取決于。
在 cpython 中,全局解釋器鎖 (GIL) 確保給定進(jìn)程中一次只有 1 個(gè)線程可以運(yùn)行 python 代碼。如果您的循環(huán)受 CPU 限制,則在單個(gè)進(jìn)程中添加線程不會(huì)加快速度。如果您的循環(huán)由于某種原因(例如從磁盤(pán)讀取數(shù)據(jù))而休眠,線程可以加速它。使用多處理,由于 GIL 是針對(duì)每個(gè)進(jìn)程的,因此您可以加快處理速度。
多線程和多處理存在開(kāi)銷,包括啟動(dòng)線程/進(jìn)程、向線程/進(jìn)程獲取數(shù)據(jù)以及返回結(jié)果的成本。根據(jù)您所做的事情,這可能比循環(huán)本身更昂貴。
因此,這個(gè)問(wèn)題沒(méi)有通用的答案。它高度依賴于任務(wù)。
添加回答
舉報(bào)
0/150
提交
取消