2011-12-28 13 views

Respuesta

10

lo probé para ver:

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() 

Éstos son los resultados que obtuve:

  • CPython 2.7 + CPython 2.7: trabajo
  • PyPy 1.7 + PyPy 1.7: trabajando
  • CPython 2.7 + PyPy 1.7: no funciona
  • CPython 2,7 + PyPy Nightly (PyPy-c-jit-50911-94e9969b5f00-Linux64): trabajo

Al utilizar PyPy 1.7 (no importa que es el servidor y que es el cliente), se informa un error con IOError: bad message length. Esto también refleja the report on the pypy-dev mailing list. Sin embargo, esto fue arreglado recientemente (funciona en la construcción nocturna), por lo que la próxima versión (presumiblemente 1.8) debería tenerlo arreglado también.

En general, esto funciona porque el módulo de multiprocesamiento usa el módulo pickle de Python, que es estable y se admite en múltiples implementaciones de Python, incluso PyPy.

+0

¡Es increíble que hayas encontrado ese informe de errores! – Jonathan

+0

¡Gracias por probar esto! – Demolishun