多处理python和pypy之间的监听器和客户端

Jon*_*han 5 python pypy multiprocessing

是否有可能有一个监听器服务器进程和一个客户端进程,其中一个使用python解释器而另一个使用pypy解释器?

conn.send()conn.recv()互操作性好吗?

jte*_*ace 10

我试了一下,看看:

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()
Run Code Online (Sandbox Code Playgroud)

以下是我得到的结果:

  • 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模块,它在多个Python实现中都是稳定的,甚至是PyPy.