在进行数据传输的时候,在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,也不知道正确与否,忘指教。

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-02-27
  • 2022-12-23
  • 2021-08-05
  • 2022-01-18
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-02-19
  • 2022-02-05
  • 2022-01-11
  • 2021-05-24
  • 2021-09-10
  • 2021-08-12
  • 2021-12-25
相关资源
相似解决方案