J'ai un script et je veux qu'une fonction s'exécute en même temps que l'autre.
L'exemple de code que j'ai regardé:
import threading
def MyThread (threading.thread):
# doing something........
def MyThread2 (threading.thread):
# doing something........
MyThread().start()
MyThread2().start()
J'ai du mal à faire fonctionner cela. Je préférerais que cela fonctionne en utilisant une fonction filetée plutôt qu'une classe.
Voici le script de travail:
from threading import Thread
class myClass():
def help(self):
os.system('./ssh.py')
def nope(self):
a = [1,2,3,4,5,6,67,78]
for i in a:
print i
sleep(1)
if __name__ == "__main__":
Yep = myClass()
thread = Thread(target = Yep.help)
thread2 = Thread(target = Yep.nope)
thread.start()
thread2.start()
thread.join()
print 'Finished'
python
multithreading
chrissygormley
la source
la source
exiting
commeexciting
, ce que je pensais être plus approprié de toute façon.Il y a quelques problèmes avec votre code:
Si vous voulez vraiment faire cela avec uniquement des fonctions, vous avez deux options:
Avec filetage:
Avec fil:
Doc pour thread.start_new_thread
la source
thread.start_new_thread(function, args[, kwargs])
J'ai essayé d'ajouter une autre jointure (), et cela semble fonctionner. Voici le code
la source
Vous pouvez utiliser l'
target
argument duThread
constructeur pour passer directement une fonction qui est appelée à la place derun
.la source
Avez-vous remplacé la méthode run ()? Si vous
__init__
avez passé outre , vous êtes-vous assuré d'appeler la basethreading.Thread.__init__()
?Après avoir démarré les deux threads, le thread principal continue-t-il de fonctionner indéfiniment / bloque / joint sur les threads enfants afin que l'exécution du thread principal ne se termine pas avant que les threads enfants aient terminé leurs tâches?
Et enfin, obtenez-vous des exceptions non gérées?
la source
__init__
. Est-ce que run () est requis alors? Mercidef MyThread ( threading.thread )
... J'ai supposé qu'il s'agissait de définitions de classe. Si vous allez sous-classer threading.thread et initialiser l'objet thread avectarget=None
ou omettre l'target
argument arg, alors une implémentation de run () est requise. Sinon, si vous souhaitez simplement exécuter une tâche simple dans un autre thread, consultez la réponse de jkp.Python 3 a la possibilité de lancer des tâches parallèles . Cela facilite notre travail.
Il a pour le pool de threads et le pool de processus .
Ce qui suit donne un aperçu:
Exemple de ThreadPoolExecutor
Un autre exemple
la source