RosettaCodeData/Task/Metered-concurrency/Python/metered-concurrency.py

38 lines
715 B
Python

import time
import threading
# Only 4 workers can run in the same time
sem = threading.Semaphore(4)
workers = []
running = 1
def worker():
me = threading.currentThread()
while 1:
sem.acquire()
try:
if not running:
break
print '%s acquired semaphore' % me.getName()
time.sleep(2.0)
finally:
sem.release()
time.sleep(0.01) # Let others acquire
# Start 10 workers
for i in range(10):
t = threading.Thread(name=str(i), target=worker)
workers.append(t)
t.start()
# Main loop
try:
while 1:
time.sleep(0.1)
except KeyboardInterrupt:
running = 0
for t in workers:
t.join()