Иногда после (быстрого) заполнения Queue
for i in xrange(N):
q.put(i)
вызов из того же потока q.empty() возвращает True (хотя q.qsize() всегда возвращает правильное значение N). Иллюстрация:
from multiprocessing import Queue
N = 100
q = Queue()
while True:
for i in xrange(N):
q.put(i)
r = q.empty()
if r == True:
print 'Gotcha!'
print 'q.empty()=%s' % r
break
for i in xrange(N):
q.get()
# Тут можно вставить очистку очереди; но необходимости нет.
В доке написано, что «Because of multithreading/multiprocessing semantics, this is not reliable.», но неужели до такой степени всё плохо, что даже из одного потока всё непредсказуемо?