【发布时间】:2021-06-14 03:08:43
【问题描述】:
我在使用 Python-RQ 排队作业时遇到问题,作业似乎已排队,但它们不会运行、崩溃或其他任何必须做的事情。
我正在做的过程如下:
- 在 localhost 上运行 redis 服务器:
loren@RONDAN1:/mnt/c/Users/rondan$ sudo service redis-server restart
[sudo] password for loren:
Stopping redis-server: redis-server.
Starting redis-server: redis-server.
loren@RONDAN1:/mnt/c/Users/rondan$ rq info
default | 0
1 queues, 0 jobs total
72a81f7d4cde4e7c865b178772766aef (RONDAN1 95): idle default
1 workers, 1 queues
Updated: 2021-03-16 19:26:52.459427
- 在其他 bash 上运行 worker:
loren@RONDAN1:/mnt/c/Users/rondan$ rq worker --with-scheduler
19:26:42 Worker rq:worker:72a81f7d4cde4e7c865b178772766aef: started, version 1.7.0
19:26:42 Subscribing to channel rq:pubsub:72a81f7d4cde4e7c865b178772766aef
19:26:42 *** Listening on default...
19:26:42 Trying to acquire locks for default
19:26:42 Scheduler for default started with PID 98
19:26:42 Cleaning registries for queue: default
- 运行我的 python 演示代码(此代码以异步方式在没有 redis 队列的情况下工作):
main.py
import lightquery as lq
from datetime import datetime, timedelta
import time
from redis import Redis
from rq import Queue
queue = Queue(connection=Redis())
def queue_tasks():
queue.enqueue(lq.print_task, 5)
queue.enqueue_in(timedelta(seconds=10), lq.print_numbers, 5)
def main():
queue_tasks()
if __name__ == "__main__":
main()
lightquery.py
import time
def print_task(seconds):
print("Starting task")
for num in range(seconds):
print(num, ". Hello World!")
time.sleep(1)
print("Task completed")
def print_numbers(seconds):
print("Starting num task")
for num in range(seconds):
print(num)
time.sleep(1)
print("Task to print_numbers completed")
- 运行代码后,执行正常结束,作业入队:
loren@RONDAN1:/mnt/c/Users/rondan$ rq worker --with-scheduler
19:26:42 Worker rq:worker:72a81f7d4cde4e7c865b178772766aef: started, version 1.7.0
19:26:42 Subscribing to channel rq:pubsub:72a81f7d4cde4e7c865b178772766aef
19:26:42 *** Listening on default...
19:26:42 Trying to acquire locks for default
19:26:42 Scheduler for default started with PID 98
19:26:42 Cleaning registries for queue: default
19:28:43 default: lightquery.print_task(5) (02a07849-64b5-4f44-8e0b-89bb466110ee)
我尝试在添加作业后显示作业队列并打印一个空数组(也许这可以帮助你给我一个解决方案)
已编辑
loren@RONDAN1:/mnt/c/Users/rondan$ sudo service redis-server restart
Stopping redis-server: redis-server.
Starting redis-server: redis-server.
loren@RONDAN1:/mnt/c/Users/rondan$ rq info
default | 0
1 queues, 0 jobs total
0 workers, 1 queues
Updated: 2021-03-17 07:59:13.587043
loren@RONDAN1:/mnt/c/Users/rondan$
loren@RONDAN1:/mnt/c/Users/rondan$ rq worker --with-scheduler
08:00:15 Worker rq:worker:b1fcdaaf1c224e239d28f9fdf8509a1a: started, version 1.7.0
08:00:15 Subscribing to channel rq:pubsub:b1fcdaaf1c224e239d28f9fdf8509a1a
08:00:15 *** Listening on default...
08:00:15 Trying to acquire locks for default
08:00:15 Scheduler for default started with PID 65
08:00:15 Cleaning registries for queue: default
loren@RONDAN1:/mnt/c/Users/rondan$ rq info
default | 0
1 queues, 0 jobs total
b1fcdaaf1c224e239d28f9fdf8509a1a (RONDAN1 62): idle default
1 workers, 1 queues
Updated: 2021-03-17 08:02:29.590837
【问题讨论】:
-
如果你真的按照给定的顺序运行命令,那么在我看来,就像
rq info命令的输出中的另一个工人正在消耗这些作业,它说1 workers。 -
是的,这是我粘贴的代码中的错误,刚刚编辑过,同样的情况@OndřejXichtSvětlík