5

リスナーサーバープロセスとクライアントプロセスを使用して、一方がpythonインタープリターを使用し、もう一方がpypyインタープリターを使用することは可能ですか?

conn.send()うまく相互運用できますかconn.recv()

4

1 に答える 1

11

私はそれを見てみました:

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()

これが私が得た結果です:

  • CPython 2.7 + CPython 2.7:動作中
  • PyPy 1.7 + PyPy 1.7:動作中
  • CPython 2.7 + PyPy 1.7:機能しない
  • CPython 2.7 + PyPy Nightly(pypy-c-jit-50911-94e9969b5f00-linux64):動作中

PyPy 1.7を使用している場合(どちらがサーバーでどちらがクライアントであるかは関係ありません)、エラーが。で報告されIOError: bad message lengthます。これは、pypy-devメーリングリストのレポートも反映しています。ただし、これは最近修正されたため(ナイトリービルドで機能します)、次のバージョン(おそらく1.8)でも修正されるはずです。

一般に、これが機能するのは、マルチプロセッシングモジュールがPythonのpickleモジュールを使用しているためです。これは安定しており、PyPyを含む複数のPython実装でサポートされています。

于 2011-12-28T17:47:58.197 に答える