是否可能有一个监听服务器进程和客户端进程,其中一个使用Python解释器,另一个使用pypy解释器?
conn.send()
和conn.recv()
能够很好地互操作吗?
是否可能有一个监听服务器进程和客户端进程,其中一个使用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。