Skip to content

Commit 2c12305

Browse files
committed
ch19: fixed race condition in procs.py
1 parent 3ecfb21 commit 2c12305

File tree

1 file changed

+12
-7
lines changed

1 file changed

+12
-7
lines changed

19-concurrency/primes/procs.py

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ def check(n: int) -> PrimeResult: # <6>
3030
def worker(jobs: JobQueue, results: ResultQueue) -> None: # <7>
3131
while n := jobs.get(): # <8>
3232
results.put(check(n)) # <9>
33+
results.put(PrimeResult(0, False, 0.0)) # <10>
3334
# end::PRIMES_PROC_TOP[]
3435

3536
# tag::PRIMES_PROC_MAIN[]
@@ -53,15 +54,19 @@ def main() -> None:
5354
proc.start() # <5>
5455
jobs.put(0) # <6>
5556

56-
while True:
57-
n, prime, elapsed = results.get() # <7>
58-
label = 'P' if prime else ' '
59-
print(f'{n:16} {label} {elapsed:9.6f}s') # <8>
60-
if jobs.empty(): # <9>
61-
break
57+
workers_done = 0
58+
checked = 0
59+
while workers_done < workers: # <7>
60+
n, prime, elapsed = results.get() # <8>
61+
if n == 0:
62+
workers_done += 1 # <9>
63+
else:
64+
checked += 1
65+
label = 'P' if prime else ' '
66+
print(f'{n:16} {label} {elapsed:9.6f}s') # <10>
6267

6368
elapsed = perf_counter() - t0
64-
print(f'Total time: {elapsed:.2f}s')
69+
print(f'{checked} checks in {elapsed:.2f}s') # <11>
6570

6671
if __name__ == '__main__':
6772
main()

0 commit comments

Comments
 (0)