многопроцессорные слушатели и клиенты между python и pypy
Возможно ли иметь серверный процесс слушателя и клиентский процесс, где один из них использует интерпретатор python, а другой-интерпретатор pypy?
Будут ли conn.send()
и conn.recv()
хорошо взаимодействовать?
1 ответ:
Я попробовал посмотреть:
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 . Однако это было недавно исправлено (он работает в nightly build), поэтому в следующей версии (предположительно 1.8) он также должен быть исправлен.В общем случае это работает, потому что модуль многопроцессорной обработки использует модуль Python pickle, который стабилен и поддерживается несколькими реализациями Python, даже PyPy.