Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
 Аватар для Kuaranir
0 / 0 / 0
Регистрация: 20.04.2019
Сообщений: 8

Многопоточность в Python для камер слежения

29.01.2025, 20:48. Показов 2076. Ответов 2

Студворк — интернет-сервис помощи студентам
Добрый день.

Описание задачи:
У меня есть 7 магазинов, в каждом есть ip-камеры. А также 7 Телеграм-каналов, для каждого магазина.
У меня есть скрипт, который анализирует картинку с камер, и периодически отправляет в соответствующий Телеграм-канал картинку с найденными на ней пустыми полками без продуктов (такова задача - искать пустые полки).

У меня есть база PostgreSQL, в которой описаны все 7 магазинов.
Каждая строка - соответственно один магазин. А столбцы - это данные магазина: имя, rtsp-ссылка на камеры, chat_id для магазина, время работы магазина, интервал отправки сообщений в Телеграм-канал (обычно ставится 30 минут) и так далее.


У меня в скрипте реализована многопоточность в Python в таком виде:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
if __name__ == '__main__':
    def wrapped_get_camera(record):
        while True:
            try:
                get_camera(record)
            except Exception as e:
                text = f'Ошибка в потоке для магазина {record[5]}: {str(e)}'
                print(text)
                r = requests.post('https://api.telegram.org/bot' + TOKEN
                                + '/sendMessage?chat_id=CHAT_ID' + '&text=' + text)
                time.sleep(60)  # Пауза перед повторной попыткой
                continue
 
    with concurrent.futures.ThreadPoolExecutor(max_workers=len(records)) as executor:
        futures = [executor.submit(wrapped_get_camera, record) for record in records]
        concurrent.futures.wait(futures, return_when=concurrent.futures.FIRST_EXCEPTION)

Самое главное тут - функция
Python
1
[B]get_camera[/B]
. Там внутри нее зашит весь анализ изображений с камеры.
Многопоточность как бы запускает 7 её экземпляров, то есть для каждого магазина. Запускается все параллельно, чтобы отправка сообщений в Телеграм-каналы шла независимо по каждому магазину, иначе если анализ изображения на одном магазине зависнет надолго, то остальные магазины просто встанут.

И вот проблема:
один из 7 магазинов при данном раскладе практически не работает. Вот тот интервал отправки сообщений в Телеграм-канал в 30 минут превращается в день, два или вообще неделю. Не пойму, почему именно он. А самый прикол, что когда я отключаю работу остальных магазинов (в БД у меня есть такой столбец типа работает/не не работает), то этот самый магазин отлично запускается и работает.
И еще: вроде бы все запускается параллельно, но опять же, возвращаясь к интервалу отправки сообщений в Телеграм-каналах сообщения иногда отправляются будто бы последовательно. То есть будто бы на одном магазине зависает распознавание картинки, и когда оно завершается, то отправляются все сразу в одно время.

В общем, мучаюсь с задачей уже несколько недель. По функционалу скрипта вопросов нет.
Проблема конкретно в многопотоке, правильно ли он запущен? Может что-то надо добавить?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.01.2025, 20:48
Ответы с готовыми решениями:

Есть ли полноценная многопоточность в Python?
Всем доброго времени суток, в Python я новичек, ну и ближе к делу. Написал маленькую программку - на входе данные в виде списков, на...

Многопоточность в Python, thread или multiprocessing
Приветствую всех читающих. По необходимости понадобилась многопоточность в python. Перелопатил горы материала, сделал вывод, что thread -...

Многопоточность в Python, синхронизация потоков с помощью семафоров или мьютексов
Требуется разработать многопоточное приложение. Приложение состоит из 4 потоков: • “main” (главный поток): запускает потоки “inc”, “dec”...

2
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
30.01.2025, 07:02
Лучший ответ Сообщение было отмечено Kuaranir как решение

Решение

Kuaranir, все будет работать как вы сказали только в момент самой отправки в тг, вот там будет параллельность, в остальном -нет. Почему? потому что распознавание и работа с изображением это ЦПУ-баунд задача, это наш программистский термин означающий что эта задача целиком решается центральным процессором, а не системой ввода-вывода (как отправка запроса). В питоне параллелятся потоками только система ввода-вывода. Как только надо долго и упорно что-то считать/анализировать (а именно это в скрипте происходит) - все встают и ждут пока анализ закончится, что вы и наблюдаете.

Решения:
1) перейти на питон 3.13 и включить экспериментальную функцию свободных потоков (параллелят и цпу). Тут как повезет, может и не взлететь
2) запускать не потоки, а процессы, через мультипроцессинг например, тоже есть свои сложности, но уже вариант
3) сделать несколько независимых сервисов, например те же 7 сервисов, которые непрерывно чего то там анализируют и результаты кидают по TCP то есть просто по сети сервису, который занимается отправкой в тг
4) сделать независмый скрипт который умеет считать ровно 1 магаз и слать данные в тг, принимает аргументы запуска -ид магазина. Тогда основной скрипт просто читает бд и запускает 7 независмых опять же полноценных скриптов-программ, это можно даже в баш или cmd сделать

Вопросы:
1) а почему задержка только при падении исключения? при нормальной работе не нужна пауза?
2) если упадет отправка в тг по любой причине -рухнет все, или так и задумано?
2
 Аватар для Kuaranir
0 / 0 / 0
Регистрация: 20.04.2019
Сообщений: 8
01.02.2025, 10:47  [ТС]
Welemir1, спасибо огромное, попробую.
1) а почему задержка только при падении исключения? при нормальной работе не нужна пауза?
ну задержка у меня есть только если картинка из камеры кривая/битая, тогда скрипт немного ждет чтобы проанализировать следующий скриншот. Ну и 30 минут - это мой интервал отправок сообщений.
2) если упадет отправка в тг по любой причине -рухнет все, или так и задумано?
Нет, если отправка рухнет, то ничего не будет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.02.2025, 10:47
Помогаю со студенческими работами здесь

Многопоточность в Python PyQt5 Поток просто не хочет привязываться к функции
Доброго времени суток!Я столкнулся с проблемой создания потока для функции с использованием PyQt5 Поток просто не хочет привязываться к...

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

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

Предоставление онлайн трансляций мировых камер/камер городов
Доброго времени суток. Появилась потребность в размещении на сайте онлайн трансляций мировых камер/камер городов(в идеале это камеры...

Многопоточность в python, Rabbitmq
доброго времени суток, господа. я не имею опыта в многопоточности python`а, однако пришло время во всем разобраться! у меня есть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru