Задать вопрос
@unknowndeal

Как запустить одновременно две бесконечные функции?

Есть бот на aiogram, он работает на пулинге. Он обрабатывает некоторый инпут с юзера, но есть еще и основная функция, которая играет каждую минуту. Одна из функции не играет вообще, в зависимости от того какую первую вызвал.
Пытался разделить на потоки, 1 раз работают оба элемента, потом выключаются. Это если использовать thread.join(), а если на join() не разделять, то работает только один поток всегда. Подскажите как решить?
def main():
     while True:
          db = downloadCSV()
          print("db downloaded")
         sticker_list = getAllWantedStickers(telegramId)
          notifyAboutSticker(db, sticker_list)
           if os.path.exists(db):
              os.remove(db)
           time.sleep(10)
   
   if __name__=="__main__":
       #while True:    
       thread1 = Thread(target=main())
       thread2 = Thread(target=executor.start_polling(dp))
       thread1.start()
       thread2.start()
  • Вопрос задан
  • 594 просмотра
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
@deliro
target=lambda: main()
target=lambda: executor.start_polling(dp)
Ответ написан
Комментировать
HemulGM
@HemulGM Куратор тега Python
Delphi Developer, сис. админ
thread1 = Thread(target=main())

Тут питон думает, что ты хочешь положить в target значение, которое вернётся из main(). Т.е. перед тем как запустить "поток" он вызовет main() чтоб получить результат, а у тебя там бесконечный цикл.

Чтоб передать "ссылку" на метод, укажи инструкцию lambda: перед нужным методом

thread1 = Thread(target=lambda: main())
thread2 = Thread(target=lambda: executor.start_polling(dp))
Ответ написан
Ваш ответ на вопрос

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

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