Задать вопрос
@Bombesko
Чайник

Два цикла одновременно — как?

Всем привет! Сделал скрипт - телеграмм бот + прослушивание событий из бд и отправка сообщений. Всё работает, но... Когда запускаю собранный .exe (через auto-py-to-exe) он начинает просто жрать ОЗУ до предела. Хотя если запустить .py - всё нормально. Может я с multiprocessing накосячил? Вот код:

пару хэнлеров для команд ТГ боту

def listen_event()():
    тут слушатель событий БД и когда появляется новое событие - делаются 
    манипуляции с SQL и шлется сообщение в ТГ
    return

def start_tg_observer():
    executor.start_polling(dp, skip_updates=True)

def start_fb_observer():
    while True: # что бы он запустился ждать новое событие
            listen_event()

if __name__ == "__main__":
    try:
        Process(target=start_tg_observer).start()
        Process(target=start_fb_observer).start()
    except Exception as e:
        pass

Ещё раз повторюсь - проблема появляется только когда соберешь в .exe. Помогите, пожалуйста. Спасибо!
  • Вопрос задан
  • 1263 просмотра
Подписаться 3 Средний 4 комментария
Решения вопроса 1
@Bombesko Автор вопроса
Чайник
Не знаю почему, но у меня заработало так:
пару хэнлеров для команд ТГ боту

def listen_event()():
    # пункт №1 - Перенёс во внутрь этой функции While True

def start_tg_observer():
    executor.start_polling(dp, skip_updates=True)

# пункт №2 - Функцию снизу вообще удалил
def start_fb_observer():
    while True: # что бы он запустился ждать новое событие
            listen_event()

if __name__ == "__main__":
    try:
        Process(target=start_tg_observer).start()
        # пункт №3 внизу заменил на запуск listen_event напрямую.
        Process(target=start_fb_observer).start() 
    except Exception as e:
        pass

В итоге занимает 125 мб ОЗУ -_-
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
SoreMix
@SoreMix Куратор тега Python
yellow
Известная тема

from multiprocessing import freeze_support

if __name__ == "__main__":
    freeze_support()
    try:
        Process(target=start_tg_observer).start()
        Process(target=start_fb_observer).start()
    except Exception as e:
        pass


https://nitratine.net/blog/post/issues-when-using-...
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы