Set_result () будущего не заканчивает ожидание после цикла create_task ()Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Set_result () будущего не заканчивает ожидание после цикла create_task ()

Сообщение Anonymous »

Я пишу программу Python, включающую цикл create_task () , которая вызывает асинхронные функции. В каждой задаче он ждет, пока другой поток установит результат для будущего объекта .

Код: Выделить всё

async def run(self) -> int:
cur_ts = 0
tasks: List[asyncio.Task] = []
while not self.requests.empty():
req = self.requests.get()
self.num_reqs += 1
t = asyncio.create_task(self._send_request(req))
tasks.append(t)
interval = req.get_timestamp() - cur_ts
cur_ts = req.get_timestamp()
# Sleep for x ms
await asyncio.sleep(interval / 1000)
await asyncio.gather(*tasks)
accuracy = self.num_corrects.get() / self.num_reqs
failure = self.num_failures.get() / self.num_reqs
print("Accuracy is ", accuracy, ", failure rate is ", failure)
return 0

async def _send_request(self, req: Request) -> None:
err = self.sched.receive(req)
if err == 0:
res = await req.get_result()
if res == 1:
self.num_corrects.increment()
else:
self.num_failures.increment()
Я столкнулся с странной проблемой, которая до окончания цикла в run () , когда результат установлен, _send_request () может продолжаться после ожидания . Но как только цикл завершится, _send_request () застрянет, даже если результат установлен. в запросе ed:

Код: Выделить всё

def set_result(self, result: int):
if not self.result.done():
self.result.set_result(result)

async def get_result(self) -> int:
return await self.result
Future объект создается в rete () .
Я проверил идентификатор цикла события и обнаружил, что все созданные задачи - это в том же цикле.
Следовательно, мне интересно, что может быть причиной этой проблемы?>

Подробнее здесь: https://stackoverflow.com/questions/794 ... reate-task
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как использовать функцию Set Set State Set Set Satwerive AMD (ADL) (для программного переворачивания)
    Anonymous » » в форуме C#
    0 Ответы
    40 Просмотры
    Последнее сообщение Anonymous
  • Почему моя задача выполняется медленно при использовании Task.Result, но быстро, когда я использую await Task
    Anonymous » » в форуме C#
    0 Ответы
    116 Просмотры
    Последнее сообщение Anonymous
  • Есть ли разница между ожиданием asyncio.Task и asyncio.Task.result()?
    Anonymous » » в форуме Python
    0 Ответы
    45 Просмотры
    Последнее сообщение Anonymous
  • Есть ли разница между ожиданием asyncio.Task и asyncio.Task.result()?
    Anonymous » » в форуме Python
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous
  • Как преобразовать Set> в Set?
    Anonymous » » в форуме JAVA
    0 Ответы
    62 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»