2014-01-21 1 views
2

while 루프가 메인에서 실행 중이며 스레드를 만들고 시작합니다. 그러나이 스레드가 작업을 마칠 때까지는 while 루프가 다른 스레드를 만들지 못하도록 차단합니다. 어떤 도움을 주셔서 감사합니다. 나는 조건을 사용하여 시도했지만 그것은 작동하지 않습니다.다른 스레드에서 기다리는 동안 메인 while 루프가 블로킹하지 않도록합니다. 파이썬

내 코드 : 모든

def main(): 
     while True: 
      result = DoTaskBatch() 


    def DoTaskBatch(): 
     for task in tasks: 
      task_thread = TaskThread(task) 
      task_thread.start() 

class TaskThread(threading.Thread): 
    def __init__(self, task): 
     threading.Thread.__init__(self) 
     self.task = task 
     self.status = TASK_PASS 

    def run(self): 
     task = self.task 
     processed_image_name = DoTask(task) 
+0

이 작업을 수행 할 필요가 없습니다. 코드는 대기열에 작업이있을 때만 호출됩니다. 작업자를 관리하고 대기열에 작업 중인지 여부를 지속적으로 확인하지 않아도됩니다. 브로커가 당신을 위해 이것을 처리합니다. –

+0

이것은 Google의 자체 샘플 프로젝트에서 수행하는 코드입니다. while 루프는 문제가되지 않습니다. 문제는 내 스레드 중 하나가 하나의 작업을 처리하는 데 너무 오래 걸리는 경우이고 while 루프는 차단되지 않아야하며 대기열에서 작업을 대기열에서 계속 임대해야합니다 (있는 경우). –

답변

1

첫째로 당신은 당신 whilefor 루프에 대한 귀하의 들여 쓰기를 수정해야합니다. 둘째, 왜 while 루프 전에 스레드를 시작하지 않는가? while 루프에서해야 할 이유가 표시되지 않습니다.

+0

죄송합니다. 나는 들여 쓰기를 수정했습니다. while 루프는 Google App Engine 작업 대기열에서 작업을 지속적으로 검사하여 임대하고 그에 따라 스레드를 생성하기 때문에 필요합니다. 그래서 while 루프 안에 있어야합니다. –

+0

당신은 계속해서 스레드를 반복해서 만들 것이라고 계속 알고 있습니까? – jramirez

+0

예. 이것이 작동하는 방식입니다. 사용자가 요청할 때마다 작업 큐가 작업을 가져오고이 while 루프 (작업 큐에서 작업 검사를 계속 함)가 작업을 임대 한 다음 스레드를 만듭니다. 따라서 스레드가 필요할 때만 지속적으로 스레드를 생성합니다. –

관련 문제