[PYTHON] 대기열의 모든 항목 지우기
PYTHON대기열의 모든 항목 지우기
대기열을 지우려면 어떻게해야합니까? 예를 들어, 대기열에있는 데이터가 있지만 어떤 이유로 기존 데이터가 필요하지 않고 대기열을 지우고 싶습니다.
어떤 방법이 있습니까? 윌이 작동 :
oldQueue = Queue.Queue()
해결법
-
==============================
1.
q = Queue.Queue() q.queue.clear()
편집하다 명확성과 간결성을 위해 스레드 안전성 문제는 생략했지만 @Dan D는 매우 정확합니다. 다음이 더 좋습니다.
q = Queue.Queue() with q.mutex: q.queue.clear()
-
==============================
2.모든 put에 unfinished_tasks 멤버가 추가되기 때문에 대기열을 지울 수 없습니다. 조인 방법은이 값에 따라 다릅니다. 그리고 all_tasks_done도 통보 받아야합니다.
모든 put에 unfinished_tasks 멤버가 추가되기 때문에 대기열을 지울 수 없습니다. 조인 방법은이 값에 따라 다릅니다. 그리고 all_tasks_done도 통보 받아야합니다.
q.mutex.acquire() q.queue.clear() q.all_tasks_done.notify_all() q.unfinished_tasks = 0 q.mutex.release()
또는 알맞은 방법으로 get과 task_done 쌍을 사용하여 안전하게 작업을 지울 수 있습니다.
while not q.empty(): try: q.get(False) except Empty: continue q.task_done()
아니면 그냥 새로운 대기열을 만들고 이전 대기열을 삭제하십시오.
-
==============================
3.이것은 나를 위해 꽤 잘하는 것 같습니다. 나는 중요한 것을 놓친 경우를 대비하여 의견 / 추가를 환영합니다.
이것은 나를 위해 꽤 잘하는 것 같습니다. 나는 중요한 것을 놓친 경우를 대비하여 의견 / 추가를 환영합니다.
class Queue(queue.Queue): ''' A custom queue subclass that provides a :meth:`clear` method. ''' def clear(self): ''' Clears all items from the queue. ''' with self.mutex: unfinished = self.unfinished_tasks - len(self.queue) if unfinished <= 0: if unfinished < 0: raise ValueError('task_done() called too many times') self.all_tasks_done.notify_all() self.unfinished_tasks = unfinished self.queue.clear() self.not_full.notify_all()
from https://stackoverflow.com/questions/6517953/clear-all-items-from-the-queue by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] Python : 클래스를 반복 가능하게 만든다. (0) | 2018.10.19 |
---|---|
[PYTHON] 팬더 데이터 프레임을 시리즈로 변환 (0) | 2018.10.19 |
[PYTHON] 표준 라이브러리를 사용하여 잘못된 형식의 HTML을 파이썬에서 구문 분석하는 방법 (0) | 2018.10.19 |
[PYTHON] pymongo.errors.CursorNotFound : 서버에서 커서 ID '...'이 유효하지 않습니다. (0) | 2018.10.19 |
[PYTHON] 제목과 xlabels가 겹치지 않도록 Matplotlib subplots_adjust hspace? (0) | 2018.10.19 |