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.ThreadDoublon possible de Création de threads en python