← retour aux snippets

threads: file de tâches avec Queue

Mettre en place des workers simples pour traiter des jobs en parallèle.

python concurrency #threading#queue#workers

objectif

Mettre en place des workers simples pour traiter des jobs en parallèle.

code minimal

import threading, queue

q = queue.Queue()
out = []
lock = threading.Lock()

def worker():
    while True:
        item = q.get()
        if item is None:
            q.task_done()
            break
        res = item * item
        with lock:
            out.append(res)
        q.task_done()

threads = [threading.Thread(target=worker) for _ in range(2)]
for t in threads: t.start()
for i in range(5): q.put(i)
for _ in threads: q.put(None)
q.join()
for t in threads: t.join()
print(sorted(out) == [0,1,4,9,16])  # attendu: True

utilisation

print(True)

variante(s) utile(s)

import queue
q = queue.Queue(maxsize=1)
print(q.maxsize == 1)

notes

  • Envoyez des sentinelles (None) pour arrêter proprement les workers.
  • Protégez les structures partagées via verrous (ou utilisez Queue).