Я попробовал, чтобы увидеть:
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) это должно быть исправлено.
В общем, это работает, потому что в многопроцессорном модуле используется модуль Python pickle , который стабилен и поддерживается в нескольких реализациях Python, даже PyPy.