Python的multiprocessing.connection
allows for a Listener-Client pattern。您可以選擇它使用套接字類型:Python的multiprocessing.connection序列化?
- TCP套接字
- Unix域套接字
- 的Windows命名管道
是否connection
連載\泡菜在所有插座類型的信息?或者,通過發送本地Python對象,後兩者節省時間\ cpu?
Python的multiprocessing.connection
allows for a Listener-Client pattern。您可以選擇它使用套接字類型:Python的multiprocessing.connection序列化?
是否connection
連載\泡菜在所有插座類型的信息?或者,通過發送本地Python對象,後兩者節省時間\ cpu?
multiprocessing.Connection
(不同類型的插座和管道)可以使用的所有傳輸通道都以類流的方式工作。因此,爲了通過這些通道發送和接收Python對象必須被序列化/反序列化(或者如果你想這樣說明,編碼/解碼)。
在多處理模塊共享的_ConnectionBase
方法,它實現recv()
和send(obj)
所有連接類型:
def send(self, obj):
"""Send a (picklable) object"""
self._check_closed()
self._check_writable()
buf = io.BytesIO()
ForkingPickler(buf, pickle.HIGHEST_PROTOCOL).dump(obj)
self._send_bytes(buf.getbuffer())
def recv(self):
"""Receive a (picklable) object"""
self._check_closed()
self._check_readable()
buf = self._recv_bytes()
return pickle.loads(buf.getbuffer())
在這裏,我們看到,所有的Python對象由pickle
序列使用二進制協議被髮送之前和在收到後解序列化。實際的發送/接收是在_send_bytes
和_recv_bytes
方法中執行的,對於每種傳輸信道,其實施方式不同。
參考: https://github.com/schmir/python/blob/master/Lib/multiprocessing/connection.py
某種序列化是必要的;單獨的進程不能直接共享Python對象。
連接對象允許發送和接收picklable 對象或串。他們可以被認爲是以消息爲導向的連接套接字 。
進程實際上可以通過[Managers](http://docs.python.org/library/multiprocessing.html#multiprocessing-managers)共享Python對象。另外,「可揀貨物」並不意味着它們必須被醃製。我確定他們是通過TCP套接字序列化的,但我的問題是關於另外兩種套接字類型的...... – Jonathan 2011-12-15 15:16:05
是不是你的問題回答? – 2013-03-26 12:39:14