Python和PyPy之间的多进程监听器和客户端

5
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版本)也应该会解决这个问题。

总的来说,这样做是因为multiprocessing模块使用Python的pickle模块,该模块稳定并支持多个Python实现,包括PyPy。


太棒了,你找到了那个错误报告!! - Jonathan Livni

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接