thread lock example async python function subprocess popen python-multiprocessing

python - lock - ¿Es posible ejecutar la función en un subproceso sin enhebrar o escribir un archivo/script por separado?



python pool thread (3)

Creo que estás buscando algo más como el módulo de multiprocesamiento:

http://docs.python.org/library/multiprocessing.html#the-process-class

El módulo de subproceso es para procesos de desove y hacer cosas con su entrada / salida, no para funciones en ejecución.

Aquí hay una versión de multiprocessing de su código:

from multiprocessing import Process, Queue def my_function(q, x): q.put(x + 100) if __name__ == ''__main__'': queue = Queue() p = Process(target=my_function, args=(queue, 1)) p.start() p.join() # this blocks until the process terminates result = queue.get() print result

import subprocess def my_function(x): return x + 100 output = subprocess.Popen(my_function, 1) #I would like to pass the function object and its arguments print output #desired output: 101

Solo he encontrado documentación sobre la apertura de subprocesos usando scripts separados. ¿Alguien sabe cómo pasar objetos de función o incluso una manera fácil de pasar el código de función?


La publicación anterior de Brian McKenna sobre el multiprocesamiento es realmente útil, pero si desea ir por la ruta enhebrada (en oposición a la basada en procesos), este ejemplo lo ayudará a comenzar:

import threading import time def blocker(): while True: print "Oh, sorry, am I in the way?" time.sleep(1) t = threading.Thread(name=''child procs'', target=blocker) t.start() # Prove that we passed through the blocking call print "No, that''s okay"

También puede usar la función setDaemon(True) para hacer un fondo del hilo inmediatamente.


Puede usar la llamada estándar del sistema de fork Unix, como os.fork() . fork() creará un nuevo proceso, con la misma secuencia de comandos ejecutándose. En el nuevo proceso, devolverá 0, mientras que en el proceso anterior devolverá la identificación del proceso del nuevo proceso.

child_pid = os.fork() if child_pid == 0: print "New proc" else: print "Old proc"

Para una biblioteca de nivel superior, que proporciona soporte de multiprocesamiento que proporciona una abstracción portátil para usar procesos múltiples, existe el módulo de multiprocessing . Hay un artículo sobre IBM Developer Works , multiprocesamiento con Python , con una breve introducción a ambas técnicas.