Вызов неизвестной функции блокировки в асинхронной программе Python3.12. ⇐ Python
Вызов неизвестной функции блокировки в асинхронной программе Python3.12.
Я написал очень простую асинхронную демонстрацию, чтобы попытаться понять асинхронные структуры, однако в одной из моих асинхронных функций я вызываю другую асинхронную функцию и жду, чтобы она вернула значение.
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.
Я написал очень простую асинхронную демонстрацию, чтобы попытаться понять асинхронные структуры, однако в одной из моих асинхронных функций я вызываю другую асинхронную функцию и жду, чтобы она вернула значение.
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.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Перехват ошибок из асинхронной функции в блоке try..catch вне асинхронной функции
Anonymous » » в форуме Javascript - 0 Ответы
- 40 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Scrapy + Playwright: вызов синхронной функции parse_single из асинхронной функции анализа
Anonymous » » в форуме Python - 0 Ответы
- 16 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Scrapy + Playwright: вызов синхронной функции parse_single из асинхронной функции анализа
Anonymous » » в форуме Python - 0 Ответы
- 19 Просмотры
-
Последнее сообщение Anonymous
-