todo review and try finally for queue.task_done()