zoukankan      html  css  js  c++  java
  • 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,也不知道正确与否,忘指教。

  • 相关阅读:
    softmax和cross_entropy
    python初始化list列表(1维、2维)
    奥卡姆剃刀 (Occam Razor)
    何谓超参数?
    面试干货!21个必知数据科学面试题和答案
    计算广告算法到底要做什么?
    推荐系统的常用算法
    推荐系统常见面试题2
    推荐系统算法面试题
    mysql-面试题
  • 原文地址:https://www.cnblogs.com/sidianok/p/14745166.html
Copyright © 2011-2022 走看看