Skip to content
This repository was archived by the owner on Dec 23, 2024. It is now read-only.

fix(dispatcher): mark tasks as done after taking elements off queue #1305

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

d-Rickyy-b
Copy link

This PR fixes an issue where the updates_queue.join() method would never return. When waiting for the updates_queue to get emptied, the asyncio queue implementation relies on an internal counter. This counter is incremented on each put() but is not automatically decremented on each get(). In order to decrement the counter we need to use updates_queue.task_done(), as per the docs. Since this wasn't done in pyrogram yet, there was no proper way to use the join() method on the updates_queue and hence wait until all updates got processed.

A workaround would be to use a while loop and check if updates_queue.empty() returns true. But using join() is just a lot cleaner and does not require a loop on our end.

…_queue

This commit fixes an issue where the `updates_queue.join()` method would never return.
When waiting for the `updates_queue` to get emptied, the asyncio queue implementation relies on an internal counter. This counter is incremented on each `put()` but is not automatically decremented on each `get()`.
In order to decrement the counter we need to use `updates_queue.task_done()`, as per the [docs](https://docs.python.org/3/library/asyncio-queue.html#asyncio.Queue.task_done). Since this wasn't done in pyrogram yet, there was no proper way to use the `join()` method on the updates_queue and hence wait until all updates got processed.

A workaround would be to use a while loop and check if `updates_queue.empty()` returns true. But using `join()` is just a lot cleaner and does not require a loop on our end.
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Development

Successfully merging this pull request may close these issues.

1 participant