Сочетание зелёного листа с колбой и стандартных ниток - PullRequest
0 голосов
/ 29 августа 2018

Сегодня я после небольшой хитрой ситуации. Я использую процесс Flask-socketio на основе eventlet. Чтобы сделать это, мне нужно также пропатчить модуль Thread, модуль socket и os.

Что происходит, так это то, что я запускаю фоновый поток в процессе Flask-socketio, который работает нормально. Теперь этот поток через некоторое время создаст процесс (из другого скрипта, Process.py), который будет отвечать за обработку изображений и будет взаимодействовать с ним с помощью SimpleQueues. Чтобы просмотреть изображения, второй процесс запускает поток камеры (picamera), который будет отвечать за получение новых кадров.

Результаты показывают, что picamera использует стандартную библиотеку потоков, поэтому мне нужно отключить исправление обезьян и использовать стандартный модуль python для потоков при импорте Process.py, а также использовать пропатченный модуль в рамках процесса flask-socketio. Это возможно? Можно ли использовать другой модуль потока в другом процессе?

1 Ответ

0 голосов
/ 31 августа 2018

Короткий ответ: да, ваш основной и подпроцесс не обязательно должны оба использовать eventlet. Ничего плохого в том, что вы не используете его в подпроцессе, и на самом деле, если вы собираетесь общаться с оборудованием, использование eventlet почти всегда не будет работать хорошо.

Я думаю, что вы можете заставить вещи работать так же, как вы запускаете свой подпроцесс, но, на мой взгляд, у вас будет меньше проблем, если вы запустите эти два процесса отдельно, а не один как подпроцесс процесса. Другой. Ваш основной процесс будет на 100% eventlet со всеми исправлениями обезьяны, в то время как процесс вашей камеры не будет иметь абсолютно никаких следов eventlet. Связь между этими двумя процессами осуществляется через любой доступный механизм IPC. Вы можете использовать очереди, сокеты и т. Д. Процесс камеры запустится и перейдет в режим ожидания, например, при просмотре очереди заданий, выданных основным процессом.

Надеюсь, это поможет!

...