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.