python的multiprocessing模組實現了多程序功能,但官方文件上只有一些比較簡單的用法,主要是使用函式作為process的target,而如何在class中使用多程序並沒有多講解。google出兩篇比較詳細的文章,建議從它們入門:
下面記錄一下自己這週在python多程序上碰到的坑:
建立程序時,引數必須能夠被pickle,所以有些自定義的類物件例項是不能被作為引數的
和threading不同,multiprocessing process引數必須能夠被pickle進行序列化
python 2.7,can』t pickle
python 2.7 的 python 3.5版本中,multiprocessing的行為是不同的,有些**可以在3.5中執行,在2.7中卻執行出錯
例如上,在3.5中可以執行,這是因為在3.5版本中,pick可以序列化更多的型別。
盡量避免類例項中包含multiprocess.manager例項,否則會有
typeerror: pickling an authenticationstring object is disallowed for security reasons
或者:_pickle.picklingerror: can『t pickle : attribute lookup weakref on builtins failed
程序間共享的物件,使用manager進行管理
manager會生成乙個程序,所以不同程序間訪問統一變數,是通過ipc進行的,會有效能上的開銷。
關於主程序所在的檔案** 使用multiprocessing時,主模組會被import到各程序中,所以建立子程序的部分,必須使用
if __name__ == 『__main__:
進行保護,否則會有runtime error,或者遞迴建立子程序
原文:
Python多程序相關的坑
python的multiprocessing模組實現了多程序功能,但官方文件上只有一些比較簡單的用法,主要是使用函式作為process的target,而如何在class中使用多程序並沒有多講解。google出兩篇比較詳細的文章,建議從它們入門 下面記錄一下自己這週在python多程序上碰到的坑 和t...
Python 多程序 踩坑記
話不多說,python多程序要匯入包from multiprocessing import pool 具體使用方法如下 def func i print run task s.os.getpid t time.time do some operations print task s runs 0.2...
python多程序 python多程序
當有多個非相關任務需要處理時,並行能大大提高處理速度。這裡簡要介紹python的multiprocessing模組。簡單多程序編寫 當我們任務數量確定而且比較少的時候,可以手動為每個任務指定乙個程序來執行。import multiprocessing as mp def f a print a if...