import random
import time
from queue import Queue, Empty
from threading import Thread, RLock
from typing import *


def worker(worker_id: int, queue: Queue):
    while True:
        try:
            job: dict = queue.get_nowait()
            # print(f'worker: {worker_id}, start: {job}')
            time.sleep(job['sleep_time'])
            print(f'worker: {worker_id}, done: {job}')
        except Empty:
            break


if __name__ == '__main__':
    queue: Queue = Queue()
    for i in range(100):
        queue.put({'i': i, 'sleep_time': random.random()})
    
    threads: List[Thread] = [
        Thread(target=worker, args=(i, queue))
        for i in range(10)
    ]
    for t in threads:
        t.start()
    for t in threads:
        t.join()
