python多進程 multiprocessing之參數使用必須是可以序列化的。


在進行數據傳輸的時候,在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,也不知道正確與否,忘指教。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM