В доке написано
Queue.empty()т.е там не гарантируется ниче, нафиг тогда этот метод? Можно ли им все-таки проверять незаполненость?
Return True if the queue is empty, False otherwise. If empty() returns True it doesn’t guarantee that a subsequent call to put() will not block. Similarly, if empty() returns False it doesn’t guarantee that a subsequent call to get() will not block.
и там же в доке
def worker():
while True:
item = q.get()
do_work(item)
q.task_done()