是否可以有一个Listener 服务器进程和一个 Client 进程,其中一个使用 python 解释器,另一个使用pypy解释器?
会conn.send()
和conn.recv()
互操作良好吗?
是否可以有一个Listener 服务器进程和一个 Client 进程,其中一个使用 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)也应该修复它。
一般来说,这是可行的,因为 multiprocessing 模块使用 Python 的pickle模块,该模块是稳定的,并且支持多个 Python 实现,甚至是 PyPy。