2011-03-17 9 views
3

속도 제한이 있고 때때로 오랜 기간 동안 누락 된 (응답이없는) 서비스와 통신하는 셀러리 작업을 작성할 때 올바른 접근 방법은 무엇입니까?트위터와 comelicate하는 샐러리 작업

작업을 다시 시도해야합니까? 서비스에 너무 많은 시간이 없으면 어떻게 될까요? 오랜 기간 후에이 작업을 나중에 실행할 수 있도록 저장할 수있는 방법이 있습니까?

긴 태스크에서 하위 태스크 인 경우 어떻게합니까?

답변

2

먼저 응답을 오랫동안 기다리지 않도록 소켓 시간 제한을 설정하는 것이 좋습니다. 소켓 TimeOutException을 잡을 수 있고,이 경우에는 15 분 같이 많은 시간을 재 시도 할 수 있습니다. 어쨌든 일반적으로 증분 비율로 incrementalRetry를 사용합니다. 작업 재시도 할 때마다 시간이 늘어나 긴 시간 동안 사용할 수있는 외부 서비스에 의존하는 작업을 작성할 때 유용합니다. 당신은 50과 같은 작업을 재 시도의 높은 수를 설정하고 작업이 같은 방법을 구현할 수있는 후보다 VAR

#20 seconds 
self.default_retry_delay = 20 

를 사용하여 표준 재시도 시간을 설정할 수 있습니다

def incrementalRetry(self, exc, perc = 20, args = None): 
    """By default the retry delay is increased by 20 percent""" 
    if args: 
     self.request.args = args 

    delay = self.default_retry_delay 

    if self.request.kwargs.has_key('retry_deleay'): 
     delay = self.request.kwargs['retry_deleay'] 

    retry_delay = delay+round((delay*perc)/100,2) 
    #print "delay"+str(retry_delay) 

    self.retry(self.request.args, 
       self.request.kwargs.update({'retry_deleay':retry_delay}), 
       exc=exc,countdown=retry_delay, max_retries=self.max_retries) 

긴 태스크에서 하위 태스크 인 경우 어떻게해야합니까? 당신이 결과를 필요로하지 않는 경우

당신이 task.delay를 사용하여 비동기 모드로 실행할 수 있습니다 (인수의 = [])는 좋은 기능을 사용하면 다른 작업을 시작하고 후에 할 수 있도록 작업 그룹은 또한 모두 당신이 다른 일을 할 수있는 일을 완료했습니다.

관련 문제