ch19: fixed race condition in procs.py
This commit is contained in:
@@ -30,6 +30,7 @@ def check(n: int) -> PrimeResult: # <6>
|
|||||||
def worker(jobs: JobQueue, results: ResultQueue) -> None: # <7>
|
def worker(jobs: JobQueue, results: ResultQueue) -> None: # <7>
|
||||||
while n := jobs.get(): # <8>
|
while n := jobs.get(): # <8>
|
||||||
results.put(check(n)) # <9>
|
results.put(check(n)) # <9>
|
||||||
|
results.put(PrimeResult(0, False, 0.0)) # <10>
|
||||||
# end::PRIMES_PROC_TOP[]
|
# end::PRIMES_PROC_TOP[]
|
||||||
|
|
||||||
# tag::PRIMES_PROC_MAIN[]
|
# tag::PRIMES_PROC_MAIN[]
|
||||||
@@ -53,15 +54,19 @@ def main() -> None:
|
|||||||
proc.start() # <5>
|
proc.start() # <5>
|
||||||
jobs.put(0) # <6>
|
jobs.put(0) # <6>
|
||||||
|
|
||||||
while True:
|
workers_done = 0
|
||||||
n, prime, elapsed = results.get() # <7>
|
checked = 0
|
||||||
label = 'P' if prime else ' '
|
while workers_done < workers: # <7>
|
||||||
print(f'{n:16} {label} {elapsed:9.6f}s') # <8>
|
n, prime, elapsed = results.get() # <8>
|
||||||
if jobs.empty(): # <9>
|
if n == 0:
|
||||||
break
|
workers_done += 1 # <9>
|
||||||
|
else:
|
||||||
|
checked += 1
|
||||||
|
label = 'P' if prime else ' '
|
||||||
|
print(f'{n:16} {label} {elapsed:9.6f}s') # <10>
|
||||||
|
|
||||||
elapsed = perf_counter() - t0
|
elapsed = perf_counter() - t0
|
||||||
print(f'Total time: {elapsed:.2f}s')
|
print(f'{checked} checks in {elapsed:.2f}s') # <11>
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
main()
|
main()
|
||||||
|
|||||||
Reference in New Issue
Block a user