Страницы

Поиск по вопросам

четверг, 21 марта 2019 г.

Параллельное выполнение функций на Python без threading

Есть скрипт, представляющий собой бота для Telegram. Две функции, выполняющие разные задачи.
Первая отвечает на запросы пользователя (мгновенно), другая оповещает пользователей при появлении новости на сайте, периодически запрашивая содержимое страницы (тоже мгновенно), но в ней есть таймаут (не опрашивать же сайт каждую секунду, так?), поэтому их нельзя выполнять последовательно.
Кроме использования модуля threading и запуска одной из функций в режиме демона, другого решения не нашел. Не слишком ли это, использовать такой модуль только лишь для того, чтобы запустить простую функцию-демон?
import threading from time import sleep
def function1(): ... sleep(timeout)
def function2(): ...
t = threading.Thread(target=function1) t.daemon = True t.start()
function2()


Ответ

Вообще я лично не вижу особых проблем с threading в данном случае. Но если вы хотите все делать в одном потоке, то это весьма просто.
У вас в function2(), которая отвечает на запросы пользователя, скорее всего ведь цикл, так? Вот в конец его и вставьте проверку, не прошло ли заданное время с момента предыдущей обработки содержимого страницы с новостями, и если прошло, производите вызов функции function1(). Получится примерно такой код (с сохранением ваших имен функций):
import time
def function1(): ...
def function2(): ...
latest_handling_ts = time.time() while True: # очередной ответ на запрос пользователя ...
# проверка, не прошло ли время timeout с момента последнего # запроса и обработки содержимого страницы с новостями now = time.time() if now - latest_handling_ts > timeout: # заданное время прошло, запрашиваем содержимое страницы # и обрабатываем его function1() latest_handling_ts = now
function2()

Комментариев нет:

Отправить комментарий