Вы можете перебрать копию основного хранилища данных:
for elem in list(q.queue)
Несмотря на то, что это обходит блокировки для объектов очереди, копия списка является атомарной операцией, и она должна работать нормально.
Если вы хотите сохранить блокировки, почему бы не вытащить все задачи из очереди, создать копию списка и затем вернуть их обратно.
mycopy = []
while True:
try:
elem = q.get(block=False)
except Empty:
break
else:
mycopy.append(elem)
for elem in mycopy:
q.put(elem)
for elem in mycopy:
# do something with the elements