@@ -31,46 +31,46 @@ def worker(jobs: JobQueue, results: ResultQueue) -> None: # <7>
31
31
while n := jobs .get (): # <8>
32
32
results .put (check (n )) # <9>
33
33
results .put (PrimeResult (0 , False , 0.0 )) # <10>
34
- # end::PRIMES_PROC_TOP[]
35
34
36
- # tag::PRIMES_PROC_MIDDLE[]
37
- def start_jobs (workers : int , jobs : JobQueue , results : ResultQueue ) -> None :
35
+ def start_jobs (
36
+ procs : int , jobs : JobQueue , results : ResultQueue # <11>
37
+ ) -> None :
38
38
for n in NUMBERS :
39
- jobs .put (n ) # <1>
40
- for _ in range (workers ):
41
- proc = Process (target = worker , args = (jobs , results )) # <2>
42
- proc .start () # <3>
43
- jobs .put (0 ) # <4>
44
-
45
- def report (workers : int , results : ResultQueue ) -> int :
46
- checked = 0
47
- workers_done = 0
48
- while workers_done < workers :
49
- n , prime , elapsed = results .get ()
50
- if n == 0 :
51
- workers_done += 1
52
- else :
53
- checked += 1
54
- label = 'P' if prime else ' '
55
- print (f'{ n :16} { label } { elapsed :9.6f} s' )
56
- return checked
57
- # end::PRIMES_PROC_MIDDLE[]
39
+ jobs .put (n ) # <12>
40
+ for _ in range (procs ):
41
+ proc = Process (target = worker , args = (jobs , results )) # <13>
42
+ proc .start () # <14>
43
+ jobs .put (0 ) # <15>
44
+ # end::PRIMES_PROC_TOP[]
58
45
59
46
# tag::PRIMES_PROC_MAIN[]
60
47
def main () -> None :
61
- if len (sys .argv ) < 2 :
62
- workers = cpu_count ()
48
+ if len (sys .argv ) < 2 : # <1>
49
+ procs = cpu_count ()
63
50
else :
64
- workers = int (sys .argv [1 ])
51
+ procs = int (sys .argv [1 ])
65
52
66
- print (f'Checking { len (NUMBERS )} numbers with { workers } processes:' )
53
+ print (f'Checking { len (NUMBERS )} numbers with { procs } processes:' )
67
54
t0 = perf_counter ()
68
- jobs : JobQueue = SimpleQueue ()
55
+ jobs : JobQueue = SimpleQueue () # <2>
69
56
results : ResultQueue = SimpleQueue ()
70
- start_jobs (workers , jobs , results )
71
- checked = report (workers , results )
57
+ start_jobs (procs , jobs , results ) # <3>
58
+ checked = report (procs , results ) # <4>
72
59
elapsed = perf_counter () - t0
73
- print (f'{ checked } checks in { elapsed :.2f} s' )
60
+ print (f'{ checked } checks in { elapsed :.2f} s' ) # <5>
61
+
62
+ def report (procs : int , results : ResultQueue ) -> int : # <6>
63
+ checked = 0
64
+ procs_done = 0
65
+ while procs_done < procs : # <7>
66
+ n , prime , elapsed = results .get () # <8>
67
+ if n == 0 : # <9>
68
+ procs_done += 1
69
+ else :
70
+ checked += 1 # <10>
71
+ label = 'P' if prime else ' '
72
+ print (f'{ n :16} { label } { elapsed :9.6f} s' )
73
+ return checked
74
74
75
75
if __name__ == '__main__' :
76
76
main ()
0 commit comments