5

是否可以有一个Listener 服务器进程和一个 Client 进程,其中一个使用 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 每晚(pypy-c-jit-50911-94e9969b5f00-linux64):工作

使用 PyPy 1.7 时(无论哪个是服务器,哪个是客户端),都会报错IOError: bad message length. 这也反映了 pypy-dev 邮件列表上的报告。然而,这最近被修复了(它在夜间构建中工作),所以下一个版本(大概是 1.8)也应该修复它。

一般来说,这是可行的,因为 multiprocessing 模块使用 Python 的pickle模块,该模块是稳定的,并且支持多个 Python 实现,甚至是 PyPy。

于 2011-12-28T17:47:58.197 回答