Files
h2inc-old/Multiprocessing test/ticker_new.py
2018-05-24 21:48:04 +02:00

68 lines
1.5 KiB
Python

import threading
import multiprocessing
import time
import sys
def handler(tq, wq):
while tq.empty() is not True:
ticker = tq.get(0.1)
wq.put(ticker-1000)
time.sleep(0.01)
tq.task_done()
def worker(wq, i):
while True:
task = wq.get(2)
with i.get_lock():
if task is None:
break
i.value += 1
time.sleep(0.001)
wq.task_done()
wq.task_done()
ticker_queue = multiprocessing.JoinableQueue()
work_queue = multiprocessing.JoinableQueue()
iterations = multiprocessing.Value('i', 0)
tickers = range(1000)
processes = []
threads = []
def looprun(n):
for i in tickers:
ticker_queue.put(i)
for i in range(20):
t = threading.Thread(target = handler, args = (ticker_queue, work_queue))
t.deamon = True
t.start()
threads.append(t)
for i in range(8):
p = multiprocessing.Process(target = worker, args = (work_queue, iterations, ))
p.deamon = True
p.start()
processes.append(p)
ticker_queue.join()
for i in range(8):
work_queue.put(None)
work_queue.join()
print("Closing down workers")
for p in processes:
p.join()
print("Run:",n)
print("Total number of iterations:", iterations.value)
return
if __name__=='__main__:
for n in range(100):
looprun(n+1)