-
Notifications
You must be signed in to change notification settings - Fork 22
asyncio: Change code 3.6 -> 3.10 #62
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
|
bonsoir @Karduin le fichier que tu as modifié est bien le source de ce qui se trouve ici donc effectivement c'est là qu'on pourrait envisager de corriger le code que je tape dans la vidéo (pour info, ça ne se met pas à jour tout seul depuis git, il faudra un opération manuelle pour ça) je me souviens assez mal de ce contenu, mais il me semble qu'en effet le principal du code est dans les vidéos, et que les notebooks sont bcp plus minces que dans les autres semaines. donc oui je pense que c'est la bonne voie pour mettre à jour le contenu de cette semaine-là, qui en a bien besoin par ailleurs :) merci de ton aide ! |
|
Bonjour Thierry, |
|
Bonjour @Karduin Je te remercie pour cette contribution; je viens de jeter un coup d'oeil et j'ai conclu qu'il allait me falloir de toutes façons passer pas mal de temps sur ce sujet ne serait-ce que pour me remettre tout ça en mémoire et bien tout vérifier avec les nouvelles versions aussi je te suggère de ne pas passer trop de temps là-dessus; je ne sais pas trop quand j'aurai le temps de faire ce travail, et ne suis même pas sûr de ne pas complètement enlever la semaine 8 à terme, car de toute évidence elle suscite assez peu d'intérêt, et d'autre part en l'état elle est en effet assez décalée par rapport à l'état de l'art - en plus du fait que j'ai en réalité assez peu l'occasion de pratiquer... un truc qui m'a interpelé toutefois: moi aussi à un moment j'ai été tenté de remplacer un appel à genre bref, cette histoire est bien compliquée, à nouveau je ne voudrais pas que tu perdes trop de temps là-dessus :) |
|
Bon voila les derniers. Effectivement asyncio.run ferme la boucle mais en créant un objet future la boucle ne se termine pas tant que l'objet n'est pas done.
Oui difficile d'être raccord avec les vidéos.
game rentre dans quelle catégorie ? C'est pour cela que j'ai fait comme ça. async def mainloop(self):
loop = asyncio.get_running_loop() #remplace get_event_loop
fut = loop.create_future() # l'objet future s'il n'est pas done la boucle tourne indéfiniment
# on met ensemble une clock et un scheduler
clock = Clock(fut) # je passe l'objet à clock quand fut et done on arrête clock
scheduler = Scheduler(self.script, fut) #je pass fut au scheduler pour le set à done quand tout est fini
# et on fait tourner le tout
asyncio.ensure_future(clock.run())
asyncio.ensure_future(scheduler.run())
await fut |
|
je viens de passer un peu de temps à revoir un peu tout ça ce qui ne me plait pas du tout dans toute cette affaire, c'est qu'il ne semble pas y avoir moyen d'écrire du code qui fonctionne à l'identique dans un notebook et dans un .py 'normal' je vais tacher de mieux documenter tout ceci avant de décider de la meilleure approche... |
|
Oui, j'ai travaillé avec la 3.10.
Je crois effectivement que l'on a pas le choix. La boucle existant déjà dans ipython et du coup dans les noteboooks. Cela dit, je n'ai ni ton expérience ni ta maitrise du sujet. |
|
J'ai pensé à quelque chose concernant un code commun, notebook /terminal. import asyncio
async def morceaux(message):
print(message, "début")
# avec await on rend la main
await asyncio.sleep(0.5)
print(message, "milieu")
await asyncio.sleep(1)
print(message, "fin")
return f'{message} par morceaux'
async def main():
L = await asyncio.gather(
morceaux("run 1"),
morceaux("run 2"),
)
print(L)
try:
get_ipython()
asyncio.create_task(main()) #run from ipython and notebook
except:
asyncio.run(main()) #run from consoleça fonctionne bien dans dans un terminal et dans un notebook. Dans ipython, ça run correctement, mais il passe aussi par Je crois que l'on peux différencier ipython / notebook, en récupérant l'objet avec
dans ipython terminal j'obtiens : On devrait pouvoir faire quelque chose TerminalInteractiveShell vs ZMQInteractiveShell, mais je vois pas comment. |
|
c'est une approche intéressante, mais ça me semble vraiment très compliqué par ailleurs cette semaine ne fait guère recette; les statistiques indiquent que de l'ordre de 1000 personnes seulement ont ouvert les notebooks sur la semaine 8, c'est-à-dire 25x moins que le premier notebook |
|
Effectivement, ça ne vaut vraisemblablement pas le coup d'investir du temps pour cette section. |
|
pour résumer la liste des soucis que je vois à ce stade; je parle uniquement de la toute première vidéo, celle où on fait tourner deux instances de interpréteuressai #1avec le code initial loop = asyncio.get_event_loop()
loop.run_until_complete(morceaux("run"))
loop.run_until_complete(
asyncio.gather(morceaux("run1"),
morceaux("run2")))fonctionne, mais affiche essai #2idem avec loop = asyncio.new_event_loop()
loop.run_until_complete(morceaux("run"))
loop.run_until_complete(
asyncio.gather(morceaux("run1"),
morceaux("run2")))cette fois ça plante avec essai #3pareil mais on passe par une coroutine async def main():
L = await asyncio.gather(
morceaux("run 1"),
morceaux("run 2"),
)
print(L)
loop = asyncio.new_event_loop()
loop.run_until_complete(morceaux("run"))
loop.run_until_complete(main())cette fois ça fonctionne pas mal |
|
reste à documenter un peu la même démarche avec les notebooks |
|
Mais le fait que Je ne sais pas qu'en penser. |
|
honnêtement moi non plus à vrai dire donc quelque part j'avais envie de rester le plus possible fidèle au code original enfin j'ai eu par ailleurs les chiffres de fréquentation de cette partie sur les vidéos, et ça confirme le peu d'intérêt que tout ceci a suscité donc je pense qu'il est urgent d'attendre et de réfléchir :-) |

Juste pour voir si je suis dans la bonne direction et si je continue comme ça. Est-ce que quelque chose comme ça convient ?