2014-01-22 4 views
2

multiprocessing.queuesSimpleQueue 클래스를 사용하고 있습니다. 비정상 종료 될 때까지 내 프로그램이 제대로 작동했습니다. 이제 실행 할 때마다 get 호출이 수행되기 전에 put 호출이 중단됩니다. 내 생각 엔 SimpleQueue은 기본 통신 방법과 비슷한 파일이나 유사한 것을 사용하며 손상되었습니다.SimpleQueue의 put 메소드가 정지되는 이유는 무엇입니까?

SimpleQueue을 다시 사용할 수있는 방법에 대한 아이디어가 있으십니까? 가급적이면 컴퓨터를 다시 시작하지 않고 동시에 여러 사람이 작업하는 공유 컴퓨터입니다.

+0

이 Windows 환경에 있는지 여부에 따라 달라집니다 (분 반환하지 않습니다). 'SimpleQueue'의 구현은 플랫폼에 의존적 인'Pipe'에 의존합니다. 대부분의 플랫폼에서는 단지'pipe (2)'또는'socketpair (2)'를 생성하지만, Windows에서는'win32.CreateNamedPipe'를 사용합니다. 임시 파일의 사용으로 인해 안전해야하지만 관찰 된 동작을 겪을 수 있습니다 .mktemp'. OS와 Python 버전을 모두 포함하십시오. –

+1

저는 Fedora 15와 Python 2.7.1을 사용하고 있습니다. 질문 업데이트 : 첫 번째'put' 호출은 아니지만'get' 호출이 수행되기 전에 발생합니다. –

답변

2

풋 (OBJ [블록 [초과]) 큐로
넣어 OBJ. 선택적 인수 블록이 True (기본값)이고 시간 초과가 None (기본값 : )이면 사용 가능한 슬롯이 확보 될 때까지 필요한 경우 차단하십시오.

queue.full()을 확인 하시겠습니까?

+1

이것은 이유 일 수 있지만'SimpleQueue'는'full' 메소드를 가지고 있지 않으며'put' 메소드는'block' 인자를 취하지 않습니다. 나는'Queue'로 전환 할 것입니다. –

1

제게는 전화를 많이 걸 때 SimpleQueue.put()이 얼어 붙어서 문제가 될 수 있습니까? (OS X, 아나콘다, 2.7.10)

In [1]: from multiprocessing.queues import SimpleQueue 
    ...: from time import time 
    ...: 
    ...: def put_jobs(n): 
    ...:  q = SimpleQueue() 
    ...:  t0 = time() 
    ...:  for i in xrange(n): 
    ...:   q.put((i, (42, 0))) 
    ...:  print '%.3f' % (time() - t0) 
    ...: 

In [6]: put_jobs(1000) 
0.004 

In [7]: put_jobs(1000) 
0.004 

In [8]: put_jobs(2000) 
0.007 

In [9]: put_jobs(3000) 
0.010 

In [10]: put_jobs(4000) 

관련 문제