Вызов неизвестной функции блокировки в асинхронной программе Python3.12.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Вызов неизвестной функции блокировки в асинхронной программе Python3.12.

Сообщение Anonymous »


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

returnVal = await self.taskFour(self.task_four_var)

Насколько я понимаю, во время ожидаемого вызова функции остальная часть программы должна продолжать работать, однако эта строка, похоже, блокирует и препятствует работе любых других асинхронных функций в течение времени ее ожидания. . Вызываемая функция использует asyncio.sleep(10), что должно быть неблокирующей задержкой.

Кто-нибудь может объяснить, почему это так, и/или предложить способы решения этой проблемы?

Прикреплена асинхронная задача, которая вызывается в основной функции await asyncio.gather() вместе с вызываемой функцией, которая ожидается внутри функции TaskThree.

Другие задачи, которые не показаны, просто печатают текст, чтобы показать, что они были вызваны.

async def TaskThree(self): текущее_время = время.время() if (current_time - self.start_time_three > self.task_delay_three): print(self.c[3] + «Выполнить третье задание») self.start_time_three = текущее_время returnVal = await self.taskFour(self.task_four_var) ## ПОЧЕМУ ЭТА СТРОКА КАЖЕТСЯ БЛОКИРУЮЩЕЙ? print(f"Задача 4 была возвращена с переменной: {returnVal}") self.task_four_var = returnVal еще: ожидайте asyncio.sleep(1) асинхронная защита TaskFour(self, inputVal): print(self.c[0]+f"Задача 4 была вызвана с вводом {inputVal}") ожидайте asyncio.sleep(10) входное значение += 1 вернуть входное значение асинхронное определение основного (само): пытаться: пока правда: ожидайте asyncio.gather(self.taskOne(),self.taskTwo(),self.taskThree()) кроме KeyboardInterrupt: print("Программа, завершенная пользователем, выход") прог = асинхронный тест() asyncio.run(prog.main()) Вторая задача вызывается каждые 2 секунды, и во время задачи 4 существует 10-секундная задержка, которая должна позволить выполнить вторую задачу как минимум 4 раза между ними, но выходные данные программы показывают, что во время выполнения задачи больше ничего не печатается. ожидаемый вызов задачи 4.
Выполните первое задание Выполни задание номер два Выполни задание номер два Выполни задание номер два Выполни первое задание Выполни задание три Задача 4 была вызвана с вводом 170. Задача 4 возвращена с переменной: 171.
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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