Проблема здесь в том, что когда используется await, выполнение сопрограмм (асинхронных функций) останавливается до тех пор, пока задача не завершится. В вашем коде await task1 и await task2 останавливают выполнение main() до тех пор, пока get_camera_1() и get_camera_2() не завершатся соответственно. Это означает, что detect_shelves_1() и detect_shelves_2() вызываются только после того, как получены все скриншоты, а не параллельно с получением каждого скриншота.
Чтобы исправить это и дать возможность выполнения detect_shelves_1() и detect_shelves_2() параллельно с получением скриншотов, вы можете использовать asyncio.gather() для запуска задач параллельно:
import asyncio
async def main():
while True:
if <>:
task1 = asyncio.create_task(get_camera_1())
task2 = asyncio.create_task(get_camera_2())
# Подождать завершения обеих задач параллельно
await asyncio.gather(task1, task2)
# Получить результаты задач
result1 = task1.result()
result2 = task2.result()
counts_1 = detect_shelves_1(result1)
counts_2 = detect_shelves_2(result2)
async def get_camera_1():
# Получение скриншота с камеры 1
await asyncio.sleep(1) # Представим, что это задержка получения скриншота
return screenshot_1
async def get_camera_2():
# Получение скриншота с камеры 2
await asyncio.sleep(1) # Представим, что это задержка получения скриншота
return screenshot_2
def detect_shelves_1(screenshot):
# Обработка скриншота с камеры 1
# Возможно, здесь происходит ошибка из-за отсутствия файла
return counts_1
def detect_shelves_2(screenshot):
# Обработка скриншота с камеры 2
# Возможно, здесь происходит ошибка из-за отсутствия файла
return counts_2
asyncio.run(main())
В этом коде asyncio.gather() используется для запуска get_camera_1() и get_camera_2() параллельно, а затем detect_shelves_1() и detect_shelves_2() вызываются с результатами соответствующих задач.
Функции get_camera_1 и 2 берут скриншоты с камеры из видеопотока
detect_shelves_1 и 2 обрабатывает эти фото
но на выполнении detect_shelves_1 и 2 выдает ошибку - не найден файл
То есть task 1 и 2 не выполниилсь
Почему так? в чем ошибка
функции get_camera_1 и 2 заданы как асинхронные
detect_shelves_1 и 2 не асинхронные