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

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

Python 并行處理 - Linux 和 Windows 之間的不同行為

Python 并行處理 - Linux 和 Windows 之間的不同行為

Cats萌萌 2021-08-05 16:34:41
我試圖讓我的代碼并行,但我遇到了一件我無法解釋的奇怪事情。讓我定義上下文。我有一個非常繁重的計算要做,讀取多個文件,對其進行機器學習分析,涉及很多數學。我的代碼按順序在 Windows 和 Linux 上正常運行,但是當我嘗試使用多處理時,一切都會中斷。下面是我首先在 Windows 上開發的示例:from multiprocessing.dummy import Pool as ThreadPool def ppp(element):    window,day = element    print(window,day)    time.sleep(5)    returnif __name__ == '__main__'        #%% Reading datasets    print('START')    start_time = current_milli_time()    tree = pd.read_csv('datan\\days.csv')    days = list(tree.columns)    # to be able to run this code uncomment the following line and comment the previous two    # days = ['0808', '0810', '0812', '0813', '0814', '0817', '0818', '0827', '0828', '0829']    windows = [1000]    processes_args = list(itertools.product(windows, days))    pool = ThreadPool(8)     results = pool.map_async(ppp, processes_args)    pool.close()     pool.join()     print('END', current_milli_time()-start_time, 'ms')當我在 Windows 上運行此代碼時,輸出如下所示:START100010001000 1000 1000100010001000      0810081208080813081408180827081710001000      08290828END 5036 ms125 毫秒內的一組亂七八糟的打印。在 Linux 上也有相同的行為。但是,我注意到,如果我在 Linux 上應用此方法,并查看“htop”,我看到的是一組隨機選擇執行的線程,但它們從不并行執行。因此,經過一些谷歌搜索后,我想出了這個新代碼:from multiprocessing import Pool as ProcessPooldef ppp(element):    window,day = element    print(window,day)    time.sleep(5)    return如您所見,我更改了導入語句,它基本上創建了一個進程池而不是線程池。這解決了 Linux 上的問題,實際上在真實場景中,我有 8 個處理器以 100% 運行,系統中有 8 個進程在運行。輸出看起來像以前的那樣。但是,當我在 Windows 上使用此代碼時,整個運行需要 10 多秒的時間,而且,我沒有得到任何ppp.我真的試圖尋找一個解釋,但我不明白為什么會這樣。例如這里:Windows 中的 Python 多處理池奇怪行為,他們討論了Windows 上的安全代碼,答案建議轉向線程,作為副作用,這將使代碼不是并行的,而是并發的。這里再舉一個例子:Python multiprocessing linux windows差異。所有這些問題都描述fork()和spawn處理,但我個人認為我的問題不是這樣。Python 文檔仍然解釋說 windows 沒有fork()方法(https://docs.python.org/2/library/multiprocessing.html#programming-guidelines)??傊?,現在我確信我不能在 Windows 中進行并行處理,但我認為我從所有這些討論中得出的結論是錯誤的。因此,我的問題應該是:是否可以在 Windows 中并行(在不同的 CPU 上)運行進程或線程?
查看完整描述

2 回答

  • 2 回答
  • 0 關注
  • 323 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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