Découvrons la programmation asynchrone en Python

Magie noire et concurrence

a marqué ce sujet comme résolu.

Non, Python t'enguirlanderait parce que tu aurais mis un yield dans une coroutine définie avec async. Ici, l'attente asynchrone se fait avec le async with FRIES_LOCK. Si les frites sont en préparation, alors à la fin de la préparation on finit par acquérir le verrou pour le relâcher immédiatement après avoir décrémenté le compteur.

Dans le cas présent, on libère le verrou juste après la décrémentation du compteur, donc on n'est pas loin d'un accès simultané à la ressource. Mais dans le cas où récupérer des frites prendrait 5s, comment aurait-on pu gérer le fait que plusieurs serveurs peuvent accéder au bac en même temps ? Avec un verrou, si deux serveurs arrivent en même temps, le second devra attendre 5s. Sans verrou, on a un problème avec le remplissage du bac.

Merci.

+0 -0

En fait on pourrait faire comme ceci :

  • regarder le compteur.
    • s'il est nul, acquérir le verrou.
    • regarder le compteur.
      • s'il est nul, remplir le bac et incrémenter le compteur de N.
    • relâcher le verrou.
  • décrémenter le compteur.
  • acquérir des frites.
+0 -0
Ce sujet est verrouillé.