Как отправлять данные на другой сервер с определённым периодом?

Задача такова. Нужно отправлять данные с моего сервера на другой с определенным периодом времени, например, раз в час.
Думаю делать это примерно так: посылаю запрос /send-data?period=60 и данные начинают отправляться каждые 60 секунд. Потом через какое-то время отправляю запрос /stop-data и данные прекращают отправляться.
Вот так примерно думаю отправлять данные (кстати, пользуюсь flask):
def post_to_clojure():
    try:
        r = requests.post(config.uri)
        print r.raw
    except (RuntimeError, TypeError, NameError):
        print "Error while query request"
        
@app.route('/start-timer', methods=['GET'])
def start_timer():
  i = 0
  while i < 5: # пока запрос отправляется 5 раз, т.к. я не знаю как его потом остановить
    post_to_clojure()
    time.sleep(period) # вот тут задаём период отправки
    i = i + 1

@app.route('/stop-timer', methods=['GET'])
def start_timer():
    # как остановить, если отправка данные сейчас идёт???


Как видите, там пока цикл идёт до 5. Но как сделать бесконечный цикл, чтобы потом можно было его остановить запросом /stop-data? Либо может есть какой-то другой способ, чтобы данные отправлялись в фоновом режиме и я мог его потом остановить запросом? Подскажите, пожалуйста, самый оптимальный способ
  • Вопрос задан
  • 213 просмотров
Пригласить эксперта
Ответы на вопрос 1
@OlegPyatakov
pyatakov.com
Если идти в лоб по наводке Сережа Ахен + использовать исходно приведенный код. Наверняка есть более красивое решение (например, мне категорически не нравится запускать фоновую работу в основном потоке Flask):
i = 0

def post_to_clojure():
    try:
        r = requests.post(config.uri)
        print r.raw
    except (RuntimeError, TypeError, NameError):
        print "Error while query request"
        
@app.route('/start-timer', methods=['GET'])
def start_timer():
  global i
  i = 1
  while i == 1:
    post_to_clojure()
    time.sleep(period)

@app.route('/stop-timer', methods=['GET'])
def stop_timer():
    global i
    i = 0
Ответ написан
Ваш ответ на вопрос

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

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