看板 Python 關於我們 聯絡資訊
各位好,我在運用multiprocessing的時候遇到一個問題 程式架構如下: main -----> subprocess(計算者) | | |----> subprocess(產生資料者) . . . . . . -----> subprocess(產生資料者) 運作方式是,main會產生一個subprcess,這個prcoess會負責接收輸入資料並計算然後 回傳 然後main會產生很多個subprcoess負責產生資料,這幾個負責產生資料後,將資料 餵給第一個計算者得到回傳後return給main 我的做法是: 第一個解答者用p = Popen產生,並且用PIPE做輸入輸出的溝通 後面的用pool然後pool.apply_async將p作為args輸入 這個做法會拋出一個錯誤:typeerror: can't pickle _thread.lock objects google了一下好像是process這個物件不可序列化所以不能當作process的輸入 因為計算者會用到比較多的資源不能每個產生資料者都配一個計算者,所以我當初才會 想用這個架構,藉由subprocess之間互相溝通來提升程式的效率 不知道要怎麼樣才可以達到我的目的,希望各位前輩幫忙解惑,謝謝。 --
mmmmO:靠 害我嚇到想說啥時有po文07/26 01:40
mmmmmO:嫩 我比你長一點07/26 01:42
Ommmmm:靠北喔07/26 01:43
mmmmmO:6907/26 01:51
-- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.231.21.240 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1531972455.A.B2B.html
laputaflutin: 感覺你需要一個task queue來做非同步任務? 07/19 13:26
laputaflutin: 可以搜尋celery試試看 07/19 13:27
抱歉,剛剛想到比較正確的說法,早上頭昏昏的忘記了XD 我有一個Producer&Consumer的程式,我的問題是:Consumer占用的資源很大,不能透過 增加多個Consumer來加速整體的進行而Producer占用的資源不多可以有很多個。 我用multiprocessing分別創建Producer&Consumer的subprocess,但是在想要讓 Producer將資料丟給Consumer的時候失敗了,因為process不能作為agrs 所以應該是需要一個中間的buffer來幫忙傳遞資料,就像celery的borker一樣 感謝樓上大大,我來研究一下
sma1033: 可用queue 07/19 15:30
※ 編輯: gigayaya (36.231.21.240), 07/19/2018 20:31:37
kenduest: multiprocessing 內不是有 Manager 與 Queue 可用? 07/19 20:49
laputaflutin: 也可以用RQ這個套件,celery功能強大,但是概念比 07/19 23:13
laputaflutin: 較多,除非真的很想造輪子,否則用不著自己寫 07/19 23:13
s06yji3: 透過檔案或資料庫傳資料,收集資料的process整理寫入計 07/20 08:46
s06yji3: 算的process 去取的話呢? 07/20 08:46