Python 3.x Python RQ调度程序不提供任何输出
我无法让rq_调度程序工作。下面是一个简单的例子: app.pyPython 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(
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)