首页 > 解决方案 > python-rq:工作人员很忙,但 current_job 不存在

问题描述

我正在使用python-rq将后台任务排入队列,然后尝试在我的网络应用程序中检查它们的状态。

首先,我抓取所有连接到队列的工作人员:

 workers = rq.Worker.all(queue=queue)

在开始一项任务之前,有一个工作人员的状态idle如下所示:

pid : 9
job_class : <class 'rq.job.Job'>
queue_class : <class 'rq.queue.Queue'>
version : 1.4.2
python_version : 3.7.7 (default, Jun  9 2020, 17:58:51) 
[GCC 8.3.0]
serializer : <class 'rq.serializers.DefaultSerializer'>
name : c3482062db0043ddb4ccc3cdeefb027b
queues : [Queue('training_tasks')]
_exc_handlers : []
default_result_ttl : 500
default_worker_ttl : 420
job_monitoring_interval : 30
_state : idle
_is_horse : False
_horse_pid : 0
_stop_requested : False
log : <Logger rq.worker (INFO)>
log_job_description : True
last_cleaned_at : None
successful_job_count : 0
failed_job_count : 0
total_working_time : 0
birth_date : 2020-06-29 15:45:25.704249
scheduler : None
disable_default_exception_handler : False
_job_id : None
last_heartbeat : 2020-06-29 15:45:25.712674

在我将作业排入队列并开始处理后,工作开始并state更新为busy.

 pid : 9
 job_class : <class 'rq.job.Job'>
 queue_class : <class 'rq.queue.Queue'>
 version : 1.4.2
 python_version : 3.7.7 (default, Jun  9 2020, 17:58:51) 
 [GCC 8.3.0]
 serializer : <class 'rq.serializers.DefaultSerializer'>
 name : c3482062db0043ddb4ccc3cdeefb027b
 queues : [Queue('training_tasks')]
 _exc_handlers : []
 default_result_ttl : 500
 default_worker_ttl : 420
 job_monitoring_interval : 30
 _state : busy
 _is_horse : False
 _horse_pid : 0
 _stop_requested : False
 log : <Logger rq.worker (INFO)>
 log_job_description : True
 last_cleaned_at : None
 successful_job_count : 0
 failed_job_count : 0
 total_working_time : 0
 birth_date : 2020-06-29 15:45:25.704249
 scheduler : None
 disable_default_exception_handler : False
 _job_id : b'a460194c-e0ac-4cc6-8d4d-41c62a2eca41'
 last_heartbeat : 2020-06-29 15:46:47.185807

文档声明工人应该有一个可以检查的current_job属性,例如元数据,但我的工人没有。我想我可以使用一个job_id,但我想知道为什么我的工人没有文档所说的属性。

(我使用 rq 1.4.2 和 redis 3.5.3 在 gunicorn 上运行 gevent)

标签: pythonpython-3.xpython-rq

解决方案


推荐阅读