Python 3.x Python RQ调度程序不提供任何输出

Python 3.x Python RQ调度程序不提供任何输出,python-3.x,flask,redis,scheduled-tasks,Python 3.x,Flask,Redis,Scheduled Tasks,我无法让rq_调度程序工作。下面是一个简单的例子: app.py 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(

我无法让rq_调度程序工作。下面是一个简单的例子:

app.py

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)
tasks.py

import time

def example(seconds):
    print('Starting task')
    for i in range(seconds):
        print(i)
        time.sleep(1)
    print('Task completed')
在终端的应用程序目录中,我在单独的选项卡中启动以下内容:

$redis-server

$rq worker test

$rqscheduler

$python app.py

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

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

rqscheduler -i 1 -v
然而,我也注意到了上述Flask代码的另一个问题

可能是由于dev服务器的原因,我发现函数中的
调度器.enqueue_将作业排队两次。如果在视图函数中调用了
enqueue_in
函数,则这可能不是问题。但是,当应用程序启动时,它实际运行在您放置的位置

因此,当使用dev服务器启动时,会执行两次。然后,每当自动阅读器检测到代码更改时,它将运行一次:因此,在启动开发服务器,然后保存对代码的更改后,总共有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)