在進行數據傳輸的時候,在Python中我們可以通過pickle模塊對對象進行序列化后進行傳輸,然后通過反序列化后進行使用。
今天在看《Python3標准版庫》書籍中看到
與threading不同,要向一個multiprocessing Process傳遞參數,這個參數必須能夠用pickle串行化。也就是說,傳入的參數必須為可序列化的。
我找了半天,網上查了很久,終於找到模塊對象是不可被序列化的。
import threading
def worker(num):
print('worker', num)
if __name__ == '__main__':
jobs = []
for i in range(5):
# p = multiprocessing.Process(target=worker, args=(multiprocessing,))
p = threading.Thread(target=worker, args=(multiprocessing,))
jobs.append(p)
p.start()
上面的代碼中,如果使用多進行就無法執行,個人感覺多進程需要復制不同的對象,用於各個進程之間的使用,參數對象,可以通過pickle的方式進行復制,但模塊對象在一個Python進程中是共享的,
所以pickle不能進行,這樣分析的話,只要在一個Python項目運行中,該對象是唯一的,那該對象就不能進行pickle,也不知道正確與否,忘指教。
