PTT
Submit
Submit
選擇語言
正體中文
简体中文
PTT
Python
[問題] 測試multiprocessing當中manager的dict()
作者:
kururu
(妳,好不好)
2020-10-16 17:10:58
各位先進達人好,
請問在測試以下程式碼為何結果無效?
from multiprocessing import Process, Manager
def f(d):
d[1] += '111'
d['2'] += 222
if __name__ == '__main__':
manager = Manager()
d = manager.dict()
d[1] = '1'
d['2'] = 2
p1 = Process(target=f, args=(d,))
p2 = Process(target=f, args=(d,))
p1.start()
p2.start()
p1.join()
p2.join()
print(d)
以上按照程式邏輯結果print出來是{1: '1', '2': 2}
為什麼f()沒影響到d這個dict呢?
還請指教
謝謝!
作者:
IAMPF
(PF)
2020-10-16 17:45:00
因為你用multiprocess記憶體不是共用的
作者:
tsoahans
(ㄎㄎ)
2020-10-16 17:48:00
你是在什麼環境跑的 我跑結果怎麼和你不一樣
作者: kururu (妳,好不好)
2020-10-16 17:50:00
謝謝IAMPF 大回答,請問有建議改良方法嗎?感恩回T大,我在jupyter nb上執行,跟環境有關嗎?
作者:
tsoahans
(ㄎㄎ)
2020-10-16 17:55:00
這應該是官方的範例改過來的 照理說d應該會變才對
https://i.imgur.com/8tiObPz.png
作者: kururu (妳,好不好)
2020-10-16 17:56:00
剛試著換shell執行,好像真的不一樣,是nb不適合測試multiprocessing?
作者:
tsoahans
(ㄎㄎ)
2020-10-16 17:56:00
有沒有可能是jupyter函式定義的區段沒執行到
作者: kururu (妳,好不好)
2020-10-16 17:57:00
謝謝T大,原來程式碼是沒問題的,我再研究看看是否跟nb環境有關,謝謝
作者: extraymond (extraymond)
2020-10-17 19:35:00
印象中mp會各自clone一份引用的資料,如果要對shareresource進行處理印象中要用shareable data type這可能有關
https://bit.ly/3k7mFZh
作者:
yuetsu
(Super White)
2020-10-19 00:04:00
mp在windows跟linux背後的實作方法不一樣linux用os.fork,記憶體在修改值之前共用(Copy on write)windows則是把變數pickle給新的process,記憶體不會共用然後我發現我講的東西跟這篇文章一點關係都沒有
作者: billy8407 (suprmenode)
2020-11-25 23:24:00
改global變數或回傳(不能return的方式)Mp有個定義share memory 變數的方式,可以去翻翻 mp的document
繼續閱讀
Re: [問題] slice
KSJ
[問題] slice
tsaiminghan
[問題] 爬蟲入門與html、css、js
iec
[問題] 爬蟲網站
jackjenny
[問題] iOS App前端想用Python寫後端
darrenlee1
[問題] Clustering 問題求解
moodoa3583
[問題] 監督式學習的準確度度量問題
ericerix
[資訊] Python /JS免費線上小聚
piggglet
[問題] 爬蟲時 出現中文亂碼
nzej723yyip
[問題] 高鐵爬蟲失效
yiche
Links
booklink
Contact Us: admin [ a t ] ucptt.com