@@ -31,46 +31,46 @@ def worker(jobs: JobQueue, results: ResultQueue) -> None: # <7>
3131 while n := jobs .get (): # <8>
3232 results .put (check (n )) # <9>
3333 results .put (PrimeResult (0 , False , 0.0 )) # <10>
34- # end::PRIMES_PROC_TOP[]
3534
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 :
3838 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[]
5845
5946# tag::PRIMES_PROC_MAIN[]
6047def main () -> None :
61- if len (sys .argv ) < 2 :
62- workers = cpu_count ()
48+ if len (sys .argv ) < 2 :# <1>
49+ procs = cpu_count ()
6350 else :
64- workers = int (sys .argv [1 ])
51+ procs = int (sys .argv [1 ])
6552
66- print (f'Checking { len (NUMBERS )} numbers with { workers } processes:' )
53+ print (f'Checking { len (NUMBERS )} numbers with { procs } processes:' )
6754 t0 = perf_counter ()
68- jobs : JobQueue = SimpleQueue ()
55+ jobs : JobQueue = SimpleQueue ()# <2>
6956 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>
7259 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
7474
7575if __name__ == '__main__' :
7676 main ()
0 commit comments