-
Notifications
You must be signed in to change notification settings - Fork 479
/
Copy pathrun_4.py
executable file
·62 lines (50 loc) · 1.83 KB
/
run_4.py
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
53
54
55
56
57
58
59
60
61
62
#!/usr/bin/env python
from multiprocessing import Process, Pool, Queue
import time
import sys
def bad_ass_function(**kwargs):
n = int(kwargs["n"])
t = time.time
u = t() + n
while t() < u:
pass
return_str = "finished {}s of badass-ery".format(n)
if "queue" in kwargs:
kwargs["queue"].put(return_str)
else:
return return_str
def dump_results_list(results_list):
## iterate over results until they're all done
output = []
while len(results_list) > 0:
print("{} processes still running".format(len(results_list)))
for result in results_list:
if result.ready():
output.append(result.get())
results_list[:] = [ r for r in results_list if r!=result ]
time.sleep(2)
## print the results
[ sys.stdout.write(str(o)+"\n") for o in output ]
if __name__ == "__main__":
queue = Queue()
pool = Pool()
n = 3
## "apply" takes positional args: function_name, function args tuple, function kwargs dict
##e us "apply" in analogy with Process objects
#pool.apply(bad_ass_function,None,{"queue":queue,"n":n})
## whoops...Pool objects don't like queues
#pool.apply(bad_ass_function,tuple(),{"n":n})
## Pool objects have a more familiar return strategy
#return_val = pool.apply(bad_ass_function,tuple(),{"n":n})
#print(return_val)
## now parallelize
#for n in range(4):
# return_val = pool.apply(bad_ass_function,tuple(),{"n":n})
# ##print(type(return_val))
# print(return_val)
## "apply" is not asynchronous; use "apply_async, which returns a special results object"
#results_list = []
#for n in [4,5,9,10]:
# results_list.append( pool.apply_async(bad_ass_function,tuple(),{"n":n}) )
#
#dump_results_list(results_list)