有没有办法运行python flask函数,每个特定的时间间隔并在本地服务器上显示输出?

Ked*_*r17 2 flask python-3.x apscheduler

我正在使用烧瓶工作 python 程序,我想从字典中提取键。这个键是文本格式。但我想在每个特定的时间间隔后重复上述整个过程。并每次在本地浏览器上显示此输出。

我已经使用flask_apscheduler 尝试过这个。程序运行并显示输出但只显示一次,但在时间间隔后不会重复。

这是我试过的python程序。

@app.route('/trend', methods=['POST', 'GET'])
def run_tasks():
    for i in range(0, 1):
        app.apscheduler.add_job(func=getTrendingEntities, trigger='cron', args=[i], id='j'+str(i), second = 5)

    return "Code run perfect"

@app.route('/loc', methods=['POST', 'GET'])
def getIntentAndSummary(self, request):

    if request.method == "POST":

        reqStr = request.data.decode("utf-8", "strict")
        reqStrArr = reqStr.split()
        reqStr = ' '.join(reqStrArr)
        text_1 = []
        requestBody = json.loads(reqStr)
        if requestBody.get('m') is not None:
                text_1.append(requestBody.get('m'))
        return jsonify(text_1)

if (__name__ == "__main__"):
    app.run(port = 8000)
Run Code Online (Sandbox Code Playgroud)

glh*_*lhr 6

问题是您add_job每次/trend请求页面时都在调用。作为初始化的一部分,启动调度程序之前,作业应该只添加一次(见下文)。

使用'interval'触发器而不是更有意义'cron',因为您希望您的作业每 5 秒运行一次。这是一个简单的工作示例:

from flask import Flask
from flask_apscheduler import APScheduler
import datetime

app = Flask(__name__)

#function executed by scheduled job
def my_job(text):
    print(text, str(datetime.datetime.now()))

if (__name__ == "__main__"):
    scheduler = APScheduler()
    scheduler.add_job(func=my_job, args=['job run'], trigger='interval', id='job', seconds=5)
    scheduler.start()
    app.run(port = 8000)
Run Code Online (Sandbox Code Playgroud)

示例控制台输出:

job run 2019-03-30 12:49:55.339020
job run 2019-03-30 12:50:00.339467
job run 2019-03-30 12:50:05.343154
job run 2019-03-30 12:50:10.343579
Run Code Online (Sandbox Code Playgroud)

然后,您可以通过调用来修改作业属性scheduler.modify_job()

至于每次作业运行时刷新客户端视图的第二个问题,您不能直接从 Flask 执行此操作。一种丑陋但简单的方法是添加<meta http-equiv="refresh" content="1" >到 HTML 页面以指示浏览器每秒刷新一次。一个更好的实现是使用SocketIO实时向 Web 客户端发送新数据。