另外请问一下使用
queue.join() queue.task_done()
和
while not workQueue.empty(): pass
这两种方式来判断队列中是否还有任务的机制有区别吗?哪种更好呢?
学习是最好的投资!
디자인 및 사용 시나리오에 따라 다릅니다. queue.join은 대기열의 모든 메시지가 검색되고 반환되기 전에 task_done이 호출될 때까지 차단됩니다. 일반적으로 모든 작업이 처리될 때까지 기다린 다음 프로세스를 종료하는 데 사용됩니다. Empty는 while 루프로 확인할 때 즉시 반환됩니다. 대기열이 비어 있으면 스레드는 계속해서 끝없이 루프됩니다. 루프에서 기다리는 것은 많은 CPU를 소비합니다.
디자인 및 사용 시나리오에 따라 다릅니다.
queue.join은 대기열의 모든 메시지가 검색되고 반환되기 전에 task_done이 호출될 때까지 차단됩니다. 일반적으로 모든 작업이 처리될 때까지 기다린 다음 프로세스를 종료하는 데 사용됩니다.
Empty는 while 루프로 확인할 때 즉시 반환됩니다. 대기열이 비어 있으면 스레드는 계속해서 끝없이 루프됩니다. 루프에서 기다리는 것은 많은 CPU를 소비합니다.