日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TypeError: can't pickle _thread.RLock objects

發布時間:2024/7/5 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。