リスナーサーバープロセスとクライアントプロセスを使用して、一方がpythonインタープリターを使用し、もう一方がpypyインタープリターを使用することは可能ですか?
conn.send()
うまく相互運用できますかconn.recv()
?
リスナーサーバープロセスとクライアントプロセスを使用して、一方がpythonインタープリターを使用し、もう一方がpypyインタープリターを使用することは可能ですか?
conn.send()
うまく相互運用できますかconn.recv()
?
私はそれを見てみました:
import sys
from multiprocessing.connection import Listener, Client
address = ('localhost', 6000)
def client():
conn = Client(address, authkey='secret password')
print conn.recv_bytes()
conn.close()
def server():
listener = Listener(address, authkey='secret password')
conn = listener.accept()
print 'connection accepted from', listener.last_accepted
conn.send_bytes('hello')
conn.close()
listener.close()
if __name__ == '__main__':
if sys.argv[1] == 'client':
client()
else:
server()
これが私が得た結果です:
PyPy 1.7を使用している場合(どちらがサーバーでどちらがクライアントであるかは関係ありません)、エラーが。で報告されIOError: bad message length
ます。これは、pypy-devメーリングリストのレポートも反映しています。ただし、これは最近修正されたため(ナイトリービルドで機能します)、次のバージョン(おそらく1.8)でも修正されるはずです。
一般に、これが機能するのは、マルチプロセッシングモジュールがPythonのpickleモジュールを使用しているためです。これは安定しており、PyPyを含む複数のPython実装でサポートされています。