J'essaie d'exécuter 2 fonctions en même temps.Exécuter 2 fonctions en même temps
def func1():
print 'Working'
def func2():
print 'Working'
func1()
func2()
Est-ce que quelqu'un sait comment faire cela?
J'essaie d'exécuter 2 fonctions en même temps.Exécuter 2 fonctions en même temps
def func1():
print 'Working'
def func2():
print 'Working'
func1()
func2()
Est-ce que quelqu'un sait comment faire cela?
Faites ceci:
import threading
from threading import Thread
def func1():
print 'Working'
def func2():
print 'Working'
if __name__ == '__main__':
Thread(target = func1).start()
Thread(target = func2).start()
Il voudra peut-être savoir qu'en raison du verrou Global Interpreter, ils ne s'exécuteront pas exactement au même moment, même si la machine en question a plusieurs processeurs. http://wiki.python.org/moin/GlobalInterpreterLock –
@joaquin - Votre droite, désolé, a oublié de prendre la fonction exectutions après copier et coller. – chrissygormley
ce forkbombs mon système. – KI4JGT
The answer about threading est bon, mais vous devez être un peu plus précis sur ce que vous voulez faire.
Si vous avez deux fonctions qui utilisent beaucoup de CPU, le threading (dans CPython) ne vous mènera probablement nulle part. Ensuite, vous voudrez peut-être jeter un oeil à la multiprocessing module ou peut-être vous pourriez vouloir utiliser jython/IronPython.
Si les performances liées à la CPU sont la raison, vous pouvez même implémenter des choses dans C (non-threaded) et obtenir une accélération beaucoup plus grande que de faire deux choses en parallèle dans python.
Sans plus d'informations, il n'est pas facile de trouver une bonne réponse.
La méthode utilisant le module threading
(décrit dans another réponse à cette question) à
exécuter deux fonctions en même temps semble fonctionner, mais a en fait un petit délai entre, comme
déclaré dans le Official Python Documentation. Une meilleure solution à essayer à la place utilise le multiprocessing module.
En outre, il existe d'autres modules Python utiles qui peuvent être utilisés pour l'exécution asynchrone (deux morceaux de code en même temps). Pour plus d'informations sur le choix de la meilleure option, consultez la question sur le débordement de pile au https://stackoverflow.com/q/2629680/3787376
).
Citation de la Documentation Python officiel au sujet threading module
ne fonctionne pas:
CPython détail de mise en œuvre: En CPython, en raison de l'interprète mondial Lock, un seul thread peut exécuter du code Python à la fois (même bien que certaines bibliothèques orientées sur les performances puissent surmonter cette limitation). Si vous souhaitez que votre application utilise mieux les ressources de calcul des machines multicœurs, vous devez utiliser multiprocessing ou concurrent.futures.ProcessPoolExecutor. Cependant, l'enfilage est toujours un modèle approprié si vous souhaitez exécuter simultanément plusieurs tâches liées aux E/S .
threading module
:
Il pourrait vouloir savoir qu'en raison de l'interprète de verrouillage global qu'ils ne seront pas exécutés en même temps exacte même si la machine dans question a plusieurs processeurs. wiki.python.org/Moin/GlobalInterpreterLock
- Jonas Elfström Jun 2 '10 at 11:39
J'ajoute time.time() à la fin de chaque fonction print() et limite la boucle à 9 fois sur le code de l'autre réponse. Voici ce que je vois dans mon terminal: ('a', 1509314761.857559) ('a', 1509314761.857664) ('a', 1509314761.85767) ('a', 1509314761.857675) ('a', 1509314761.85768) ('a', 1509314761.857685) ('a', 1509314761.85769) ('a', 1509314761.857695) ('a', 1509314761.857699) ('b', 1509314761.858138) ('b', 1509314761.858224) ('b', 1509314761.858229) ('b', 1509314761.858234) ('b', 1509314761.858244) ('b', 1509314761.858249) ('b', 1509314761.858253) ('b', 1509314761.858258) – weefwefwqg3
Même avec le multitraitement, ce n'est pas vraiment un rite concurrent? l'un court après l'autre. – weefwefwqg3
Nettoyé ma vieille réponse qui était mal écrite (contenu amélioré, rendu plus clair et formaté/mieux structuré). – Edward
J'ai couru ce code pour vérifier si les fonctions fonctionnent en même temps:
#! /usr/bin/env python
import threading
from threading import Thread
import time
def time1():
time.sleep(1)
print time.time()
def time2():
time.sleep(1)
print time.time()
if __name__ == '__main__':
Thread(target = time1()).start()
Thread(target = time2()).start()
Voici ce qu'il retourne:
1447425262.16 1447425263.16
Pour moi cette semble que les fonctions fonctionnent les unes après les autres ...?
Ils fonctionnent l'un après l'autre comme le prouve votre expérience, comme le dit la documentation officielle de Python (https://docs.python.org/3.3/library/threading.html). J'ai inclus cette citation sur cette même page de question aussi ([sur ma réponse] (http://stackoverflow.com/a/33064260/3787376)). – Edward
Tard dans la partie mais: La raison pour laquelle cela peut sembler confus est que le paramètre 'target' dans le constructeur 'Thread' n'est pas les fonctions 'time1' et 'time2', mais les valeurs de retour de 'time1()' et ' time2() '(notez les parenthèses). Donc, essentiellement, vous exécutez deux threads avec 'target = None'. Les deux fonctions s'exécutent lorsque vous créez les threads, pas lorsque vous les démarrez. J'espère que cela clarifie toute confusion. –
Il montre différents timing pour moi .. Il ne fonctionne pas en même temps – lalithkumar
Copie possible de [Python: Comment puis-je exécuter des fonctions python en parallèle?] (Http://stackoverflow.com/questions/7207309/python-how-can-i-run-python-functions-in-parallel) – OrangeDog