Python 储存;meta";redis作业上的数据不工作?

Python 储存;meta";redis作业上的数据不工作?,python,redis,python-rq,Python,Redis,Python Rq,我试图测试一个排队的redis作业,但是meta数据似乎没有在任务和发起人之间传递。这份工作看起来很匹配,所以我很困惑。也许一些新鲜的眼睛可以帮我解决这个问题: 任务是: 保存作业后,rqworker日志将打印作业id和word 14:32:32 *** Listening on default... 14:33:07 default: labeller.do_test('supercalafragelistic') (a6e2e579-df26-411a-b017-8788d621149f)

我试图测试一个排队的redis作业,但是
meta
数据似乎没有在任务和发起人之间传递。这份工作看起来很匹配,所以我很困惑。也许一些新鲜的眼睛可以帮我解决这个问题:

任务是:

保存作业后,
rqworker
日志将打印作业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.
该任务是从unittest调用的:

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)
并生成显示相同作业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
我尝试添加一个长延迟,以便日志有机会看到任务处于
已启动
,但未处于完成状态(以防meta在完成时被清除),但没有任何区别


知道我错过了什么吗?

在远程端发生
保存后,本地作业不会自动更新自身。必须执行
刷新
才能更新它。在重构之前,这是不必要的,因为我在每个请求上都使用作业id执行
fetch\u job

因此,测试例程需要包含一个
刷新()
(或fetch_作业)以反映任何更改:

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)

get\u status
正在更新的事实欺骗了我,使我忽略了这一点:
get\u status()
是一种查找当前状态的方法,而
meta
只是指向某个地方可能过时的数据的指针。

+1用于解决方案。我也被job.meta.save()的东西弄糊涂了。请随意接受这个答案:p
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