Queue.queue 종료 및 차단

1789 단어 python
Queue.queue 종료 및 차단
#-*-coding:utf-8-*-
import threading
import queue
import time
import random

'''
1.     Queue.Queue()    ,            。
2.                ,        threading.Thread       。
3.            ,            run           。
4.         ,   queue.task_done()                   。
5.      join   ,            ,      。
'''

class jdThread(threading.Thread):
    def __init__(self,index,queue):
        threading.Thread.__init__(self)
        self.index = index
        self.queue = queue

    def run(self):
        while True:
            time.sleep(1)
            item = self.queue.get(False,)
            if self.queue.empty():
                print("here")
                break

            print("  :",self.index,"  ",item,"  ")
            self.queue.task_done()#task_done            -1

if __name__ == '__main__':

    q = queue.Queue(0)

    for i in range(6):
        print ("the  i is :%d" % i)
        q.put(i)#put            +1

    '''
                        ,      
          0  ,                 .
    '''
    for i in range(2):
        jdThread(i,q).start()#          

print ("I am here ")

Queue.get()은 기본적으로 차단 방식 으로 데 이 터 를 읽 습 니 다.대기 열 이 비어 있 을 때 except Queue.Empty 를 던 지지 않 고 시간 이 초 과 될 때 까지 차단 에 들 어 갑 니 다.Block=False 의 인 자 를 더 하면 스 레 드 는 이상 한 방식 으로 종료 되 고 프로 세 스 도 종료 할 수 있 습 니 다.
Queue.put 는 Queue.get()과 유사 합 니 다.Queue.put()는 기본적으로 Block=True 와 timeou 두 개의 인자 가 있 습 니 다.block=true 일 때 기록 은 차단 식 이 고 차단 시간 은 timeou 에서 확인 합 니 다.대기 열 q 가(다른 스 레 드)로 가득 차 면 이 코드 는 다른 스 레 드 에서 데 이 터 를 가 져 갈 때 까지 막 힙 니 다.Queue.put()방법 에 Block=False 인 자 를 추가 하여 비 차단 방식 으로 대기 열 을 작성 합 니 다.대기 열 이 가득 찼 을 때 exception Queue.Full 의 이상 을 던 집 니 다.

좋은 웹페이지 즐겨찾기