python多程序的坑 Python多程序相關的坑

2021-10-13 06:46:00 字數 910 閱讀 7573

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...