gpt4 book ai didi

python-3.x - Python RQ-Scheduler 不提供任何输出

转载 作者:行者123 更新时间:2023-12-04 10:12:39 28 4
gpt4 key购买 nike

我无法让 rq_scheduler 工作。这是一个简单的例子:

应用程序

from flask import Flask
import datetime
from redis import Redis
from rq import Queue
from rq_scheduler import Scheduler

from tasks import example

app=Flask(__name__)
app.secret_key='abc'

app.redis = Redis.from_url('redis://')
app.task_queue = Queue('test', connection=app.redis)
scheduler = Scheduler(queue=app.task_queue,connection=app.redis)

#app.task_queue.enqueue('tasks.example',2)
#scheduler.enqueue_at(datetime.datetime(2020,4,16,10,46), example, 2)
scheduler.enqueue_in(datetime.timedelta(seconds=1), example, 2)

if __name__=='__main__':
app.run(host='0.0.0.0', port=5000, debug=True)

任务.py
import time

def example(seconds):
print('Starting task')
for i in range(seconds):
print(i)
time.sleep(1)
print('Task completed')

在终端的 app 目录中,我在单独的选项卡中启动以下内容:
$redis-server

$rq worker test

$rqscheduler

$python app.py

第一个 queue.enqueue 工作正常。两个调度程序任务什么都不做。怎么了?

最佳答案

我怀疑您可能会感到困惑,因为 rqscheduler默认情况下,每分钟检查一次新作业。您可以使用 -i 来调整它标志以秒为单位设置间隔,并添加 -v更详细输出的标志:

rqscheduler -i 1 -v

但是我也注意到上述 Flask 代码的另一个问题......

可能是由于开发服务器 spawning a separate process我发现 scheduler.enqueue_in函数将作业排队两次。如果 enqueue_in,这可能不是问题函数在 View 函数内被调用。但是,当应用程序启动时,它实际上会运行在您放置它的位置。

因此,当使用开发服务器启动时,它会被执行 两次 .这将运行 一次 每次自动重新加载器检测到代码更改时:因此在启动开发服务器后,然后保存对代码的更改,总共有 3 个作业已入队。

为了测试这一点,建议只使用一个简单的 python 脚本,它实际上并不运行 Flask 应用程序:
# enqueue_test.py

from redis import Redis
from rq import Queue
from rq_scheduler import Scheduler

from tasks import example

r = Redis.from_url('redis://localhost:6379')
q = Queue('test', connection=r)
scheduler = Scheduler(queue=q, connection=r)
scheduler.enqueue_in(datetime.timedelta(seconds=1), example, 2)

关于python-3.x - Python RQ-Scheduler 不提供任何输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61250503/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com