2015-01-22 9 views
2

대기중인 redis 작업을 테스트하려고하지만 데이터가 meta이면 작업과 작성자간에 전달되는 것 같지 않습니다. job_id가 일치하는 것처럼 보이므로 당황 스럽네요.redis 작업에 "메타"데이터가 저장되지 않습니까?

작업은 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 로그 인쇄이 작업은

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. 

저장 한 후 작업 ID와 단어 어쩌면 신선한 눈은 내가 문제를 해결 도움이 될 수 있습니다 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) 

그리고 이 로그에 동일한 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 

나는 로그 started에서 작업을 볼 수있는 기회를 갖도록 긴 지연을 추가하려했으나 (이 완료되면 경우 메타에 클리어) 상태가 완료되지하지만 어떤 차이를하지 않았다.

나는 무엇을 놓쳤는가?

답변

2

save이 원격 끝에있을 때 로컬 작업이 자동으로 업데이트되지 않습니다. 업데이트하려면 refresh해야합니다. 리팩토링 전에 모든 요청마다 job_id가 fetch_job 일 때 필요하지 않았습니다.

그래서 테스트 루틴은 refresh() (또는 fetch_job) 반영하기 위해 변경 사항을 포함해야합니다 : 조금 더 잘 작동

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은 일부 의 포인터 일뿐입니다. d 어딘가에.

+0

+1. 나는 job.meta.save()에 혼란스러워했다. 이 질문에 대답 해주십시오 : p –

관련 문제