Как я могу заставить Flask ждать? - PullRequest
0 голосов
/ 04 апреля 2019

Я запускаю программу, которая работает с запросами. Мне нужно записать время обратной связи в мою базу данных. Этот код работает нормально, но он слишком часто обновляет мою БД. Как я могу заставить метод index () ждать 60 секунд? time.sleep (60) здесь не работает.

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'

dbconn = mysql.connector.connect(host="myhost", 
                             database='mydb', 
                      user='root', password='12345')

@app.route('/', methods = ['GET', 'POST'])
def index():
    if request.method == 'POST':
        cursor = dbconn.cursor()
        time_check = datetime.datetime.now()
        query = ("update mytable set response_time=%s where service_name = 'my_service'")
        param = time_check
        cursor.execute(query, (param,))
        print("sent query")
        dbconn.commit()
        cursor.close()
        #time.sleep(60)

    return render_template('index.html')

if __name__ == '__main__':
    app.run(host = "myhostaddress", port = 1010)

1 Ответ

0 голосов
/ 04 апреля 2019

Как уже предлагалось в комментарии, использование некоторой выделенной очереди задач, вероятно, будет лучшим решением.Если вы не хотите вносить какую-либо зависимость, вы можете адаптировать этот простой пример:

from queue import Queue
import random
from threading import Thread
import time

from flask import Flask


app = Flask(__name__)


@app.route('/')
def index():
    n = random.randint(0, 100)
    q.put(n)
    return '%s\n' % n


def worker():
    while True:
        item = q.get()
        if item is None:
            break
        print('Processing %s' % item)  # do the work e.g. update database
        time.sleep(1)
        q.task_done()


if __name__ == '__main__':
    q = Queue()
    t = Thread(target=worker)
    t.start()
    app.run(host='0.0.0.0')
    q.join()
    q.put(None)
    t.join()

И тест:

pasmen@nyx:~$ for x in 1 2 3 4 5 6 7 8 9 10; do curl http://0.0.0.0:5000; done
1
90
79
25
45
50
77
25
36
99

Вывод:

(venv) pasmen@nyx:~/tmp/test$ python test.py 
 * Serving Flask app "test" (lazy loading)
 * Environment: production
   WARNING: Do not use the development server in a production environment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
127.0.0.1 - - [04/Apr/2019 14:57:57] "GET / HTTP/1.1" 200 -
Processing 1
127.0.0.1 - - [04/Apr/2019 14:57:57] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [04/Apr/2019 14:57:57] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [04/Apr/2019 14:57:57] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [04/Apr/2019 14:57:57] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [04/Apr/2019 14:57:57] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [04/Apr/2019 14:57:57] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [04/Apr/2019 14:57:57] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [04/Apr/2019 14:57:57] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [04/Apr/2019 14:57:57] "GET / HTTP/1.1" 200 -
Processing 90
Processing 79
Processing 25
Processing 45
Processing 50
Processing 77
Processing 25
Processing 36
Processing 99

Как видите, HTTP-запросы обрабатываются немедленно, в то время как между фактической работой, выполняемой worker.

, существует задержка в 1 секунду.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...