python multiprocessing.pool.MaybeEncodingError

代碼: 

from multiprocessing import Pool

p = Pool(5)
p.map(download_file, file_lists)

錯誤信息:

multiprocessing.pool.MaybeEncodingError: Error sending result: 'HTTPError()'. Reason: 'PicklingError("Can't pickle <type 'instancemethod'>: attribute lookup __builtin__.instancemethod failed",)'
 

在網上搜索到三種方法: 

1.用線程替換進程
2.可以使用copy_reg來規避上面的異常.
3.dill 或pathos.multiprocesssing :use 'import pathos.multiprocesssing', instead of 'import multiprocessing'. pathos.multiprocessing is a fork of multiprocessing that uses dill. dill can serialize almost anything in python, so you are able to send a lot more around in parallel.
 

最開始採用了方法3:use 'import pathos.multiprocesssing', instead of 'import multiprocessing' ,然後程序並不在拋出該錯誤,但是啓動case後,appium啓動driver後便不在幹活(使用兩個進程分別在不同端口啓動driver),appium log沒有錯誤,pycharm也一直轉轉轉卡在那不去執行find element, 所以還是還原到使用import multiprocessing

 

最終解決方案如下:

1. mac裡面的python都刪乾淨
2. 用pyenv裝python 3.5.2
3. 執行multi process case script
4. 把該裝的selenium, Pillow, requests裝一裝
5. 最後一步降級appium-python-client : pip install appium-python-client==0.25 (這個是重點,可以忽略其他步驟直接降級版本,這裏是因爲需要才重裝, 當然筆者local的0.31版本也可以的,就是最新版(0.43)有問題)
6. 成功!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章