2017-01-26 2 views
0

셀러리와 Redis를 함께 사용하고 있습니다. 내 tasks.py 파일에 코드를 다음 있습니다 : 셀러리 작업에 대한 인수하지만TypeError 올바른 인수에도 셀러리가 있습니다.

import zmq 
from tasks import twitterDP 
from celery.result import AsyncResult 

import time 

class WorkFlow(object): 
    def __init__(self): 
     self.ctx = zmq.Context() 
     self.socket_pull = self.ctx.socket(zmq.PULL) 
     self.socket_pull.bind("tcp://127.0.0.1:5860") 

    def do_work(self): 
     while True: 
      recv_msg = self.socket_pull.recv_json() 
      print twitterDP.apply_async(("random")) 
      time.sleep(1) 

if __name__ == "__main__": 
    wf = WorkFlow() 
    wf.do_work() 

이벤트 :

from celery import Celery 
from faker import Factory 
fake = Factory.create() 

app = Celery("tasks") 
app.conf.broker_url = 'redis://localhost:6379/0' 
app.conf.result_backend = 'redis://localhost:6379/0' 

@app.task 
def twitterDP(hashtag): 
    if hashtag: 
     return ["From Twitter " + fake.text(20) + " hashtag # " + hashtag for x in range(5)] 
    return [] 

과 작업을 실행하기 위해, 나는 다음과 같은 코드를 포함하는 또 다른 스크립트가

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/Users/sarvagya/Desktop/work/django_work/ed3/venv/lib/python2.7/site-packages/celery/app/task.py", line 517, in apply_async 
    check_arguments(*(args or()), **(kwargs or {})) 
TypeError: twitterDP() takes exactly 1 argument (6 given) 

twitterDP 기능에 대한 두 개의 매개 변수를 사용하는 경우

, 그것은 파이썬 콘솔에서 근무 : 좋은 찾고, 그것은 나에게 오류를 제공합니다. 그러나 task의 단일 매개 변수에 대해서는 메시지가 (x given) 인 TypeError를 발생 시켰습니다. 여기서 x는 전달한 문자열의 길이입니다. 위의 예제에서, 그것의 random은 6을 산출합니다. 이것은 셀러리의 버그입니까? 또는 어딘가에서 코드가 잘못 되었습니까?

답변

2

나는 셀러리 전문가가 아니라고 인정하지만, documentation for the apply_async method은 매개 변수 args이 터플이어야한다는 것을 나타냅니다. 그것은 당신이 라인

print twitterDP.apply_async(("random")) 

의 두 배 괄호 주어진 튜플로이 함수를 호출하려고하지만 당신은 확실히 파이썬에서 1 튜플을 만드는 방법을 마스터하지 않은 것 같습니다.

("random")은 괄호 안에있는 문자열이며 "random"과 같은 값입니다. 이를 1- 튜플로 만들려면 괄호 안에 후행 쉼표 (예 : ("random",))를 추가하십시오. 선은 위의 다음

print twitterDP.apply_async(("random",)) 

그것은 숫자 6 문자열 random의 문자 수로 발생 가능성이 있습니다 읽어야합니다. 다른 길이의 문자열을 시도해보고 다른 번호가 있는지 확인하십시오.

+0

예. 이것은 충분한 커피가 없을 때 일어나는 일입니다. 덕분에이 문제가 해결되었습니다. – Pant

관련 문제