2016-08-26 10 views
0

보통 프로세스 간 큐는 비어 있으며 한 번만 그 안에 무언가가 나타납니다. 내 스레드 중 하나에서 나는 다음과 같이 while 루프를 정의하려면 : 큐가 내 경우에는 신속하게 일어나는 빌 때까지이 위대한 작품을빈 예외를 발생시키지 않고 파이썬에서 get_nowait()을 사용하십시오.

def mythread(queue1): 

    while (queue1.get_nowait() != 1): 
     #do stuff 

. 큐가 비어있을 때 get_nowait() 또는 get (False)를 호출하면 빈 큐 예외가 발생합니다. 거기에 빈 예외를 제기하지 않고 차단하지 않고 대기열을 확인할 수있는 방법이 있습니까?

+0

차단하지 않으려면 빈 대기열에서 호출 할 때 어떤 일이 발생해야합니다. 예외를 잡아서 처리하십시오. – mata

답변

2

사용 empty 방법

if queue1.empty(): 
    pass 
else: 
    # get items from the queue 

참고 : 문서는 "믿을 수 없다"(어떤 농담을) 말한다.

메시지를 게시하는 동안 True (대기열이 비어 있음)을 반환 할 수 있기 때문에 예외를 잡는 것만큼이나 원자 적이지 않습니다. 글쎄, get_nowait() 콜이 뒤 따르고 있습니다. 다른 스레드가 큐를 소비하지 않으면 문제가되지 않는다고 가정합니다.이 경우 레이싱 조건이 발생할 수 있고 큐를 읽을 때 큐가 비어있을 수 있습니다!

+0

좋은 생각, 내가 원하는 하나의 루프 위에 또 다른 루프가 필요해 보입니다. – willpower2727