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

Использовать condition variable в методе wait #31

Closed
Senbjorn opened this issue Mar 22, 2024 · 1 comment
Closed
Assignees
Labels
enhancement New feature or request wontfix This will not be worked on

Comments

@Senbjorn
Copy link

Чтобы избежать такого кода и наличия параметра step

while token_for_wait:
     sync_sleep(step)

Можно использовать condition variable (привязанную к токену на котором вызываем wait):

with cv:
    while token_for_wait:
        cv.wait(timeout)

а в методе cancel:
вызывать cv.notify_all()

В оригинальном варианте такой подход осложнялся бы наличием вложенных токенов. Однако если использовать оптимизацию из предыдущего issue, то все должно работать.

P. S. единственное я не знаю как cv будет работать в случае async. По первым результатам из yandex поиска кажется, что можно заменить cv на asyncio.Event и все тоже получится.

@pomponchik pomponchik self-assigned this Aug 4, 2024
@pomponchik pomponchik added the enhancement New feature or request label Aug 4, 2024
@pomponchik
Copy link
Owner

Привет! Спасибо за идею.

Твой вариант отлично подошел бы в ситуации, будь токены из cantok отменяемыми только вызовом у них метода cancel(). В этом случае в данном методе достаточно было бы сделать как ты написал, чтобы "разморозить" все ожидающие токены.

Однако в текущую имплементацию эта идея, к сожалению, не вписывается. Дело в том, что тут есть типы токенов, которые умеют отменяться, скажем, по таймауту, или даже по наступлению произвольного условия. Чтобы проверять наступление произвольного условия нет другого способа, кроме как периодически вызывать функцию, которая его в себе содержит. Именно поэтому текущая реализация такова, какова она есть.

@pomponchik pomponchik added the wontfix This will not be worked on label Aug 4, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request wontfix This will not be worked on
Projects
None yet
Development

No branches or pull requests

2 participants