Mic*_*ael 9 python pickle multiprocessing
为什么multiprocessingpython pickle对象的包在进程之间传递它们,即将不同进程的结果返回给主解释器进程?这可能是一个非常天真的问题,但是为什么不能处理A说出处理B"对象x在内存中的点y,它现在是你的"而不必执行将对象表示为字符串所必需的操作.
multiprocessing在不同的流程中运行作业.进程有自己独立的内存空间,一般不能通过内存共享数据.
要使进程通信,您需要某种通道.一个可能的渠道是"共享内存段",这听起来几乎就是这样.但是使用"序列化"更常见.我没有广泛研究过这个问题,但我的猜测是共享内存解决方案过于紧密耦合; 序列化允许进程进行通信,而不会让一个进程导致另一个进程出错.
当数据集非常大且速度很关键时,共享内存段可能是最好的方法.我能想到的主要例子是视频帧缓冲图像数据(例如,从用户模式驱动程序传递到内核,反之亦然).
http://en.wikipedia.org/wiki/Shared_memory
http://en.wikipedia.org/wiki/Serialization
Linux和其他*NIX操作系统提供了一种通过序列化共享数据的内置机制:"域套接字"这应该非常快.
http://en.wikipedia.org/wiki/Unix_domain_socket
由于Python pickle适用于序列化,因此multiprocessing使用它. pickle是一种快速的二进制格式; 它通常比XML或JSON等序列化格式更有效.还有其他二进制序列化格式,例如Google Protocol Buffers.
使用序列化的一个好处是:在一台计算机内共享工作(使用其他核心)或在多台计算机之间共享工作(在群集中使用多台计算机)大致相同.序列化工作是相同的,网络套接字的工作方式与域套接字类似.
编辑:@Mike McKerns在下面的评论中说,multiprocessing有时可以使用共享内存.我做了谷歌搜索,发现了这个很好的讨论:Python多处理共享内存
| 归档时间: |
|
| 查看次数: |
3086 次 |
| 最近记录: |