Recosh
@Recosh
Программист студент

Как подписаться на событие из процесса и адресовать данные конкретно процессу в python 3?

Приветствую! Решил изучить Python. Подскажите, как правильно подписаться на событие изменение данных в процессе?

Попробовал нечто подобное:
import multiprocessing as mp
import logging
import time

def foo(q):
    i = 1
    while True:
        q.put({'yndx': i})
        time.sleep(1)
        i += 1

if __name__ == '__main__':
    mp.log_to_stderr().setLevel(logging.DEBUG)
    mp.set_start_method('spawn')
    q = mp.Queue()
    p = mp.Process(target=foo, args=(q,))
    p.start()
    while True:
        if not q.empty():
            broadcast = q.get()
            print(broadcast)


Но тут бесконечный цикл грузит проц до максимума, а когда их будет много... time.sleep в бесконечном цикле использовать не хочу, так как требуется моментальная доставка данных.

А в конечном итоге стоит задача, что один процесс получает данные, а другие процессы обработчики забирают то, что нужно им. При этом их количество меняется в течении жизни программы.
5e9ae058a0664391499429.png
  • Вопрос задан
  • 262 просмотра
Решения вопроса 1
Recosh
@Recosh Автор вопроса
Программист студент
Разобрался сам. Для получения события, что есть новые данные использую multiprocessing.Event(), а для обмена данными multiprocessing.Manager().dict()
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы