It does make sense to have a barrier synchronization primitive for asyncio. The idea is to make a coroutine block until at least X coroutines are waiting to enter the barrier. This is very useful, if certain actions need to be synchronized.
Recently, I had to implement a barier myself for our use case. See code below: It is simple to implement, but I too would like to have one for asyncio, in order to be consistent with the concurrency primitives we have for threading. Jonathan class Barier: """ Make a coroutine block until there are at least X waiters. Similar to the threading Barier objects but for asyncio: https://docs.python.org/3/library/threading.html#barrier-objects """ def __init__(self, parties: int) -> None: self.parties = parties self._waiting: int self._event = asyncio.Event() def add_one(self) -> None: self._waiting += 1 if self._waiting == self.parties: self._event.set() async def wait(self, worker: "Worker") -> None: """ Wait until all we have at least `parties` waiters. """ self.add_one() await self._event.wait() Le jeu. 25 févr. 2021 à 16:42, Barry Scott <ba...@barrys-emacs.org> a écrit : > > > > On 25 Feb 2021, at 13:14, Yves Duprat <ydup...@gmail.com> wrote: > > > > Hi,the list, > > > > I'm wondering why Barrier object does not exist in the synchronization > primitives of the asyncio lib while it is present in threading and > multiprocessing libs ? > > This may not be the right place to ask this question, but I never found > an answer on the web. > > Thanks for your help. > > > I'm assuming that the barrier you are speaking of is the mechanism that is > used to > synchronise threads/processes running in parallel to prevent data races. > > With async code that is never an issue. Each function runs to completion > uninterrupted. > There are no data races. Each time a async function runs it can know that > the state of > the objects it uses will not be changed while it is running. > > Barry > > > > > > > Yves > > _______________________________________________ > > Python-ideas mailing list -- python-ideas@python.org > > To unsubscribe send an email to python-ideas-le...@python.org > > https://mail.python.org/mailman3/lists/python-ideas.python.org/ > > Message archived at > https://mail.python.org/archives/list/python-ideas@python.org/message/IAFAH7PWMUDUTLXYLNSXES7VMDQ26A3W/ > > Code of Conduct: http://python.org/psf/codeofconduct/ > > > _______________________________________________ > Python-ideas mailing list -- python-ideas@python.org > To unsubscribe send an email to python-ideas-le...@python.org > https://mail.python.org/mailman3/lists/python-ideas.python.org/ > Message archived at > https://mail.python.org/archives/list/python-ideas@python.org/message/B6WDPXNZH5KYK2BLHJXUFZF2DLFBLCBR/ > Code of Conduct: http://python.org/psf/codeofconduct/ >
_______________________________________________ Python-ideas mailing list -- python-ideas@python.org To unsubscribe send an email to python-ideas-le...@python.org https://mail.python.org/mailman3/lists/python-ideas.python.org/ Message archived at https://mail.python.org/archives/list/python-ideas@python.org/message/2S7T7N3D2W6UH2WDDBSGUTEFZPNMZO2G/ Code of Conduct: http://python.org/psf/codeofconduct/