#!/usr/bin/env python3 import datetime import multiprocessing import threading import queue import sys import time def worker(index): while True: try: size = q.qsize() val = q.get(block=False) print(f"{datetime.datetime.now().isoformat()} worker {index} got {val}, queue size was {size}") time.sleep(1) except queue.Empty: print(f"{datetime.datetime.now().isoformat()} worker {index} queue is EMPTY, size was {size}") return if __name__ == "__main__": start = time.time() if len(sys.argv) > 1 and sys.argv[1] == "thread": queue_class = queue.Queue worker_class = threading.Thread print("using threads") else: queue_class = multiprocessing.Queue worker_class = multiprocessing.Process print("using processes") q = queue_class() for i in range(100): q.put(i) workers = [] for i in range(4): w = worker_class(target=worker, args=(i,)) w.start() workers.append(w) for w in workers: w.join()