99 votes

Est-il possible d'exécuter une fonction dans un sous-processus sans passer ou écrire un fichier/script séparé.

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

Je n'ai trouvé que de la documentation sur l'ouverture de sous-processus à l'aide de scripts séparés. Est-ce que quelqu'un sait comment passer des objets de fonction ou même un moyen facile de passer du code de fonction ?

133voto

Brian McKenna Points 10754

Je pense que vous cherchez quelque chose de plus comme le module multiprocesseur :

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

Le module de sous-processus est destiné aux processus de frai et de faire des choses avec leur entrée/sortie - pas pour exécuter des fonctions.

Voici une version multiprocessing de votre code :

from multiprocessing import Process, Queue

# must be a global function    
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

8voto

tristan Points 1335

Le post de Brian McKenna sur le multitraitement est vraiment utile, mais si vous voulez passer par le fil (par opposition au processus), cet exemple vous aidera à démarrer :

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" 

Vous pouvez également utiliser la fonction setDaemon(True) pour mettre le fil en arrière-plan immédiatement.

0voto

Noctis Skytower Points 5137

Je crois que vous recherchez le module multiprocesseur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X