当前位置: 首页 > 面试题库 >

使用Flask运行计划时出现问题

翟学文
2023-03-14
问题内容

我需要在Flask应用程序上定期运行某些任务。我决定使用一个简单的库-Schedule(https://github.com/dbader/schedule)来执行此操作。我在与主应用程序线程不同的线程上运行任务计划程序。这是相关的代码片段。

import schedule
import time

from flask import Flask, request
from threading import Thread

app = Flask(__name__)

start_time = time.time()

def run_every_10_seconds():
    print("Running periodic task!")
    print "Elapsed time: " + str(time.time() - start_time)

def run_schedule():
    while 1:
        schedule.run_pending()
        time.sleep(1)   

@app.route('/', methods=['GET'])
def index():
    return '<html>test</html>'

if __name__ == '__main__':
    schedule.every(10).seconds.do(run_every_10_seconds)
    t = Thread(target=run_schedule)
    t.start()
    print "Start time: " + str(start_time)
    app.run(debug=True, host='0.0.0.0', port=5000)

运行此程序时,我想要“运行定期任务!” 每10秒打印一次。但是,这是我得到的输出。

 * Running on http://0.0.0.0:5000/
 * Restarting with reloader
Start time: 1417002869.99
Running periodic task!
Elapsed time: 10.0128278732
Running periodic task!
Elapsed time: 10.0126948357
Running periodic task!
Elapsed time: 20.0249710083
Running periodic task!
Elapsed time: 20.0247309208
Running periodic task!
Elapsed time: 30.0371530056
Running periodic task!
Elapsed time: 30.0369319916

显然,由于某种原因,任务似乎每10秒执行两次,而不是一次。但是,如果我仅单独运行任务计划程序,而不是与Flask一起运行(仅通过注释app.run()行),它将正常运行。

Start time: 1417003801.52
Running periodic task!
Elapsed time: 10.0126750469
Running periodic task!
Elapsed time: 20.0246500969
Running periodic task!
Elapsed time: 30.0366458893

这可能是什么原因?运行多个线程时将任务排队的方式是否存在问题?它仍然没有解释为什么为什么一次只安排两个任务。


问题答案:

使用重新加载器运行开发服务器时(默认为debug=True),模块执行两次,导致的两个实例t。你可以通过添加来验证这一点print(id(t))

解决此问题的最简单方法是传递use_reloader=Falseapp.run。你可以看到此答案,这是允许你使用重新加载器的替代解决方案。



 类似资料:
  • 我对python开发相当陌生,对flask一无所知,我被分配了一个使用flask开发的项目。经过几周的工作,我现在能够解决所有的依赖关系和项目现在编译成功。但当我使用flask run运行项目,然后在浏览器中输入url时,它抛出“flask.cli.NoAppException”。我怎么能像这样运行我的项目呢。 > 设置FLASK_APP=init.py 设置FLASK_ENV=开发 烧瓶运行 服

  • 我正在尝试使用GPU而不是CPU运行dl4j模型。该模型使用CPU运行良好。所以我决定尝试CUDA来利用我的GPU。我遵循了这里描述的每个步骤,对于CUDA安装,我按照NVIDIA的说明从这里安装CUDA工具包。代码编译正常,但出现错误: 我的项目是使用IntelliJ上的Maven创建的。所有的依赖项都是可以的,否则代码将无法编译。必须缺少某些后端依赖项、库或安装。可能是版本不兼容的问题 消息为

  • 问题内容: 不知道是否有人遇到过这种情况,但是我会提出有关故障排除和/或替代方法的建议。 我有一台Windows 2008服务器,在该服务器上运行多个计划任务。这些任务之一是一个python脚本,该脚本使用pscp登录linux框,检查是否有新文件,如果有新文件,则将它们复制到C:驱动器的本地目录中。我还在关键点处也将一些日志记录到脚本中,并且正在使用。 我使用变量构建了命令,然后使用它来执行命令

  • 问题内容: 我已经将一个Java项目编译到一个Jar文件中,并且在运行它时遇到了问题。 当我跑步时: 我收到以下错误 该类文件不在jar的根目录中,因此我尝试更改主类的路径以使其与该类文件的路径匹配,并且遇到相同的问题。 我应该展平文件结构吗?如果是这样,我该怎么做。如果有任何用途,我正在使用Ant来构建Jar文件。 更新 这是jar的内容以及相关的Ant部分,我将我工作的公司的名称更改为“ or

  • 失败:生成失败,出现异常。 生成在8s中失败cmd:命令失败,退出代码为%1错误输出:failure:生成失败,但出现异常。

  • 我在运行数据流作业时得到以下错误。我正试图将现有的beam版本更新到2.11.0,但在运行时出现了以下错误。 java.lang.incompatibleClassChangeError:类org.apache.beam.model.pipeline.v1.runnerAPI$standardpTransforms$Primitives没有实现在org.apache.beam.runners.co