gpt4 book ai didi

python - 在 redis 作业上存储 "meta"数据不起作用?

转载 作者:IT王子 更新时间:2023-10-29 06:01:59 25 4
gpt4 key购买 nike

我正在尝试测试排队的 Redis 作业,但 meta 数据似乎没有在任务和发起者之间传递。 job_id 似乎匹配,所以我很困惑。也许一些新鲜的眼光可以帮助我解决问题:

任务是as per the documentation :

from rq import get_current_job

def do_test(word):
job = get_current_job()
print job.get_id()
job.meta['word'] = word
job.save()
print "saved: ", job.meta['word']
return True

rqworker日志保存后打印job_id和word

14:32:32 *** Listening on default...
14:33:07 default: labeller.do_test('supercalafragelistic') (a6e2e579-df26-411a-b017-8788d621149f)
a6e2e579-df26-411a-b017-8788d621149f
saved: supercalafragelistic
14:33:07 Job OK, result = True
14:33:07 Result is kept for 500 seconds.

任务从单元测试调用:

class RedisQueueTestCase(unittest.TestCase):
"""
Requires running "rqworker" on the localhost cmdline
"""
def setUp(self):
use_connection()
self.q = Queue()

def test_enqueue(self):
job = self.q.enqueue(do_test, "supercalafragelistic")
while True:
print job.get_id(), job.get_status(), job.meta.get('word')
if job.is_finished:
print "Result: ", job.result, job.meta.get('word')
break
time.sleep(0.25)

并生成此日志,显示相同的 job_id 和正确的结果,但从未填充 meta 变量 word

Testing started at 2:33 PM ...
a6e2e579-df26-411a-b017-8788d621149f queued None
a6e2e579-df26-411a-b017-8788d621149f finished None
Result: True None

Process finished with exit code 0

我尝试添加一个较长的延迟,以便日志有机会在开始中看到任务,但没有完成状态(以防元数据在完成时被清除),但它没有任何区别。

知道我错过了什么吗?

最佳答案

在远程端发生保存 后,本地作业不会自动更新。必须执行 refresh 来更新它。在重构之前,这是没有必要的,因为我在每次请求时都使用 job_id 执行 fetch_job

因此测试例程需要包含一个refresh()(或fetch_job)来反射(reflect)任何变化:

def test_enqueue(self):
job = self.q.enqueue(do_test, "supercalafragelistic")
while True:
job.refresh() #<--- well, duh, freddy
print job.get_id(), job.get_status(), job.meta.get('word')
if job.is_finished:
print "Result: ", job.result, job.meta.get('word')
break
time.sleep(0.25)

哪个效果更好:

Testing started at 5:14 PM ...
6ea0163f-b5d5-411a-906a-f765aa0b3cc6 queued None 0 []
6ea0163f-b5d5-411a-906a-f765aa0b3cc6 started supercalafragelistic
6ea0163f-b5d5-411a-906a-f765aa0b3cc6 finished supercalafragelistic
Result: True supercalafragelistic

get_status 正在更新的事实让我忽略了这一点:get_status() 是一种查找当前状态的方法,而 meta 只是指向某处一些可能陈旧数据的指针。

关于python - 在 redis 作业上存储 "meta"数据不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28081516/

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