Skip to content
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

review course on asyncio for 3.9/3.10 #61

Open
parmentelat opened this issue Apr 13, 2022 · 5 comments
Open

review course on asyncio for 3.9/3.10 #61

parmentelat opened this issue Apr 13, 2022 · 5 comments

Comments

@parmentelat
Copy link
Contributor

the differences between the course and the current Python version (3.9 in the notebooks, and very soon 3.10) are widening
that week could use a thorough review in this respect

one student pointed at least at an error caused by this
shrimpy-dev/shrimpy-python#10

probably more of those to fix; it might make sense to target 3.10 directly ? (as there are more slight changes in there again…)

@parmentelat parmentelat changed the title revoir asyncio pour 3.9 review course on asyncio for 3.9/3.10 Apr 13, 2022
@Karduin
Copy link
Contributor

Karduin commented Jun 12, 2022

Semaine 8. Programmation asynchrone - asyncio.

2 Quelqes exemples simples.

Code la vidéo

DeprecationWarning: There is no current event loop

loop = asyncio.get_event_loop()

Python 3.10 warns when calling asyncio.get_event_loop(), but no event loop is running. In the future, get_event_loop will be identical to get_running_loop.


DeprecationWarning: There is no current event loop

asyncio.gather(morceaux("run1"),

Deprecated since version 3.10: Deprecation warning is emitted if no positional arguments are provided or not all positional arguments are Future-like objects and there is no running event loop.

The recommended way to run an event loop is with run, not loop.run_until_complete.

New code

Python 3.10.4 - asyncio 3.4.3

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)

asyncio.run(main())

Works in Python and Ipython.

To run in Jupyter Notebook delete asyncio.run(main()) and run with await main()

@Karduin
Copy link
Contributor

Karduin commented Jun 13, 2022

Si je fait une PR, sous quelle forme il faudrait la faire ? Garder l'ancien code et ajouter le nouveau, un nouvel onglet pour le mooc ou autre chose ?

@parmentelat
Copy link
Contributor Author

let's keep it simple
le mieux me semble être de viser 3.10 et seulement 3.10, ce sera déjà bien
on pourra ajouter après

  • un erratum avec les vidéos, du genre 'la vidéo a été tournée avec la 3.x, le cours a été mis à jour pour 3.10; du coup à 3:50 il faut remplacer par '
  • un mot au début des notebooks pour dire que tout le chapitre 8 asyncio se base maintenant sur 3.10

et après on ne fait plus que du code pour la 3.10 partout; et idéalement bien sûr sans message DeprecationWarning pour augmenter les chances que ça marche toujours dans les versions ultérieures; tout ça a pas mal changé en quelques années...

merci en tous cas !

@Karduin
Copy link
Contributor

Karduin commented Jun 21, 2022

Histoire de faire un point :

Semaine 8. Programmation asyncrone - asyncio

1. Programmation asynchrone

Sequences File Amended Python 3.10 NTD To do
vidéo : Programmation asynchrone x
w8-s1-c1-thread-safety x
w8-s1-c2-warning-python37 x

2. Quelques exemples simples

Sequences File Amended Python 3.10 NTD To do
vidéo : quelques exemples simples w8-s2-av-code.html x

3. asyncio: historique et écosystème

Sequences File Amended Python 3.10 NTD To do
vidéo : asyncio : historique et écosystème x

4. Extensions asynchrones du langage

Sequences File Amended Python 3.10 NTD To do
vidéo : extensions asynchrones du langage w8-s4-av-code.html x
w8-s4-c1-async-http async_http.py x

5. Coroutines et awaitables

Sequences File Amended Python 3.10 NTD To do
vidéo : coroutines et awaitables w8-s5-av-coded.html x

6. Boucles d'événements

Sequences File Amended Python 3.10 NTD To do
vidéo : boucles d'événements w8-s6-av-code.html x

7. Tâches et exceptions

Sequences File Amended Python 3.10 NTD To do
vidéo :tâches et exceptions w8-s7-av-code.html x

8. La librairie asyncio

Sequences File Amended Python 3.10 NTD To do
vidéo : la libraire asyncio w8-s8-av-code.html x
w8-s8-c1-players data/players.py x
w8-s8-c2-game w8-s8-c2-game.md x

9. Bonnes pratiques

Sequences File Amended Python 3.10 NTD To do
vidéo : bonnes pratiques w8-s9-av-code.html x
w8-s9-c1 w8-s9-c1-news-python37.md ?

Le 6 et le 7 je pense m'en sortir. Pour le 8 ça risque d'être plus long, j'ai encore des notions à assimiler. Le 9 je n'ai pas encore vérifié.
Pour ceux qui sont en Nothing To Do je ne sais pas s'il faudra ajouter des commentaires.

J’espère ne pas être trop en décalage avec les vidéos, mais j'ai l'impression que l'on a pas trop le choix.
J’essaie de ne pas trop dénaturer le code.

Je teste à chaque fois sous WIndows 10 et Linux Mint 20.3 (Debian / Ubuntu). Avec Windows on doit ajouter un contrôle de plateforme, sinon à la fin de l’exécution du programme on a un RuntimeError: Event loop is closed

import platform 
if platform.system()=='Windows':
    """Solve RuntimeError: Event loop is closed in Windows"""
    asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy()) 

@parmentelat
Copy link
Contributor Author

merci pour ce point :)

ce serait peut-être plus simple si on passait en mode PR et que tu committes au fur et à mesure non ?
je peux te donner des explications plus détaillées, n'hésite pas à me contacter par mail directement si nécessaire

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants