-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMultiprocessingHelper.py
More file actions
52 lines (44 loc) · 1.44 KB
/
Copy pathMultiprocessingHelper.py
File metadata and controls
52 lines (44 loc) · 1.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import time
import multiprocess
from queue import Empty, Full
import traceback
def workerWrapper(fn, data, inq, outq):
print("starting worker")
from queue import Empty
try:
while True:
print(inq.qsize())
args = inq.get(True, 2)
outq.put(fn(data, args), True, 2)
except Empty:
print("Queue empty - all work done")
except Exception as e:
print("Unknown error", str(e))
def runFunctionMultiprocess(fn, num_proc, data, args, out_list):
start = time.perf_counter()
manager = multiprocess.Manager()
args_queue, output_queue = manager.Queue(len(args)), manager.Queue(len(args))
for params in args:
args_queue.put(params)
processes = []
#with suppress_stdout():
for i in range(num_proc):
print("starting", i)
processes.append(multiprocess.Process(target=workerWrapper, args=(fn, data, args_queue, output_queue)))
processes[-1].start()
for i, process in enumerate(processes):
print("joining", i)
process.join()
process.close()
stop = time.perf_counter()
elapsed = (stop - start)
print("All processes stopped:", elapsed)
print("Copying results...")
start = time.perf_counter()
try:
while True:
out_list.append(output_queue.get(True, 2))
except Empty:
pass
stop = time.perf_counter()
print("Finished copy results:", (stop - start))