New submission from Junyeong Jeong <rhd...@gmail.com>:
Hi The python document says that asyncio.Queue is FIFO queue. But it is not true when the queue is full and multi tasks are putting items into it simultaneously. I know the document does not explicitly mention that asyncio.Queue is multi producer queue, but also there does not exist any note that it may be corrupt if used by multi producers. I found the below scenario happens when the asyncio.Queue is full and multi tasks are putting into it simultaneously. Let me explain this. When a queue is full, putters are awaiting here: https://github.com/python/cpython/blob/d67279147ace3b63187e5d75a15c345264f39e85/Lib/asyncio/queues.py#L125 And the first of them is waken up here: https://github.com/python/cpython/blob/d67279147ace3b63187e5d75a15c345264f39e85/Lib/asyncio/queues.py#L188 Before the first putter hands over the control of execution, new putter calls the .put() method so the queue is not full at this point that it calls .put_nowait() immediately here: https://github.com/python/cpython/blob/d67279147ace3b63187e5d75a15c345264f39e85/Lib/asyncio/queues.py#L140 If this happens the new putter puts earlier than other awaiting putters. I hope the queue gets fixed to work correctly in this case. Thanks, Junyeong ---------- components: asyncio messages: 357129 nosy: asvetlov, esrse, yselivanov priority: normal severity: normal status: open title: asyncio.Queue: putting items out of order when it is full versions: Python 3.7 _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue38874> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com