Recuperación asincrónica de información de un proceso.

Aquí está el pseudo código para lo que quiero hacer.

import time def run(): while x < 10000000: x += 1 if __name__ == "__main__": p = Process(run) p.start() time.sleep(3) #some code that I don't know that will give me the current value of x 

El módulo de threading Pythons parece ser el camino a seguir, sin embargo, todavía tengo que implementar este ejemplo con éxito.

Todo lo que necesita está en el módulo de multiprocessing . Tal vez un objeto de memoria compartida ayudaría aquí?

Tenga en cuenta que el subprocesamiento en Python se ve afectado por el locking global del intérprete , que esencialmente evita el código Python multiproceso.

Bueno aqui esta

 from multiprocessing import Process, Pipe import time def f(conn): x = 0 while x < 10000000: if conn.poll(): if conn.recv() == "get": conn.send(x) x += 1 conn.close() if __name__ == '__main__': parent_conn, child_conn = Pipe() p = Process(target=f, args=(child_conn,)) p.start() time.sleep(2) parent_conn.send("get") print(parent_conn.recv()) p.join() 

Resultó ser un duplicado , mi versión es más genérica.

Realmente depende de lo que intenta lograr y de la frecuencia de creación y uso de memoria de sus subprocesos. Algunos de los de larga duración, y puede salirse con facilidad con múltiples procesos a nivel del sistema operativo (consulte el módulo de subprocess ). Si está generando muchos pequeños, el subprocesamiento es más rápido y tiene menos sobrecarga de memoria. Pero con el subproceso se encuentra con problemas como “seguridad de subprocesos”, el locking global del intérprete y cosas desagradables y aburridas como semáforos y puntos muertos.

Las estrategias de intercambio de datos entre dos procesos o subprocesos se pueden dividir aproximadamente en dos categorías: “Compartamos un bloque de memoria” (usando Lock y Mutex es) y “Compartamos copias de datos” (usando mensajes, tuberías o socket ) . El método de compartir es ligero en la memoria, pero difícil de administrar porque significa que asegurarse de que un hilo no lea la misma parte de la memoria compartida, ya que otro hilo está escribiendo en él, lo que no es trivial y difícil de depurar. El método de copia es más pesado en la memoria, pero más fácil de entender. Además, tiene la clara ventaja de poder ser portado a una red de forma bastante trivial, permitiendo la computación distribuida.

También tendrás que pensar en el sistema operativo subyacente. No sé los detalles, pero algunos son mejores que otros en diferentes enfoques.

Yo diría que empezar con algo como RabbitMQ .