Je suis vraiment novice en programmation, je me demandais s'il y avait un moyen d'exécuter une boucle while en arrière-plan du code déjà exécuté en Python?
Je pensais à quelque chose comme
Tant que vrai:
print ("charabia")
print ("pass")
avec une sortie de quelque chose comme:
'charabia charabia passer charabia ..... '
(Il n'est pas nécessaire que ce soit dans cet ordre tant que j'obtiens un résultat similaire)
3 Réponses :
Vous pouvez utiliser le multiprocessing
ou threading
:
def background_code(): while some_condition: print("gibberish") ... thread = threading.Thread(target=background_code, args=(), kwargs={}) thread.start() print("pass") ...
Je ne pense pas que cela afficherait jamais "pass"
.
C'est vrai; cependant, cela ressemble le plus au code présenté dans la question et je pense que c'est assez évident
Je crois que ce serait très utile pour les futurs lecteurs si vous pouviez montrer comment exécuter la boucle while
dans un autre thread tout en faisant autre chose (comme imprimer "pass") dans le thread principal.
@Selcuk Bonne idée. Modifié en conséquence.
les coroutines sont une alternative à la fois au multitraitement et au threading (pas du tout en désaccord avec ces choix) - fournissant simplement une troisième option
Voici quelque chose de similaire en utilisant asyncio
(nécessite python 3.7+):
import asyncio async def loop(): while True: print("gibberish") await asyncio.sleep(0.5) async def main(): future = asyncio.ensure_future(loop()) for i in range(100): print("pass") await asyncio.sleep(1) future.cancel() asyncio.get_event_loop().run_until_complete(main())
Cela affichera deux charabia
pour chaque passer
. Vous pouvez changer la durée du sommeil pour changer le rapport.
Ici, main
et boucle
sont coroutines , où une seule est exécutée à la fois. Les appels await ...
sont des points où l'exécution est potentiellement cédée à d'autres coroutines.
Vous pouvez vous référer au code suivant.
import threading def func1(): for i in range(10): print("gibberish") def func2(): print("pass") t1 = threading.Thread(target=func1) t2 = threading.Thread(target=func2) if __name__ == '__main__': t1.start() t2.start()
Il exécute simultanément les méthodes func1
et func2
afin que les méthodes fournies s'exécutent en tâche de fond l'une pour l'autre.
Vous devriez rechercher le multitraitement / multithreading.
Jetez un œil à cette réponse stackoverflow.com/a/3221320/3920623
threading.Thread
Doublon possible de Création de threads en python