TypeError: can't pickle _thread.RLock objects
生活随笔
收集整理的這篇文章主要介紹了
TypeError: can't pickle _thread.RLock objects
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
原因:繼承了進程類的類在初始化時,pickle模塊要對內部的成員變量進行序列化,但不支持對自定義對象加鎖,所以會拋出類型異常的錯誤
比如:使用多進程的參數傳遞中使用了自定義類
import multiprocessing as mp from functools import partialclass Model:def __init__(self):self.a = 1def process_job(x, y):print("subProcess-a:",y.a) return x if __name__ == '__main__':m = Model()partial_work = partial(process_job, y=m) # 將自定義Model類的對象作為參數res = pool.map(partial_work, range(5)) # 這里將會報錯pool.close()pool.join()print(res)解決方法:把類設置為全局變量進行訪問,就不用傳入到子進程了
import multiprocessing as mpclass Model:def __init__(self):self.a = 1A=None # 將需要在子進程中使用的自定義類對象申明為全局變量 def process_job(x):print("subProcess-a:",A.a) # 在子進程中訪問 Model類對象return xif __name__ == '__main__':m = Model()global AA = m # 對全局變量進行賦值pool = mp.Pool(5)res = pool.map(process_job, range(5)) # 開啟子進程pool.close()pool.join()print(res)總結
以上是生活随笔為你收集整理的TypeError: can't pickle _thread.RLock objects的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: tensorflow2.0 Datase
- 下一篇: 从源码的角度说说Activity的set