Skip to content

Commit cb34c1e

Browse files
Improve multiserver queue recipe (GH-29012) (GH-29014)
1 parent 1dbf9c8 commit cb34c1e

1 file changed

Lines changed: 6 additions & 5 deletions

File tree

Doc/library/random.rst

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -502,7 +502,7 @@ between the effects of a drug versus a placebo::
502502

503503
Simulation of arrival times and service deliveries for a multiserver queue::
504504

505-
from heapq import heappush, heappop
505+
from heapq import heapify, heapreplace
506506
from random import expovariate, gauss
507507
from statistics import mean, median, stdev
508508

@@ -514,14 +514,15 @@ Simulation of arrival times and service deliveries for a multiserver queue::
514514
waits = []
515515
arrival_time = 0.0
516516
servers = [0.0] * num_servers # time when each server becomes available
517-
for i in range(100_000):
517+
heapify(servers)
518+
for i in range(1_000_000):
518519
arrival_time += expovariate(1.0 / average_arrival_interval)
519-
next_server_available = heappop(servers)
520+
next_server_available = servers[0]
520521
wait = max(0.0, next_server_available - arrival_time)
521522
waits.append(wait)
522-
service_duration = gauss(average_service_time, stdev_service_time)
523+
service_duration = max(0.0, gauss(average_service_time, stdev_service_time))
523524
service_completed = arrival_time + wait + service_duration
524-
heappush(servers, service_completed)
525+
heapreplace(servers, service_completed)
525526

526527
print(f'Mean wait: {mean(waits):.1f}. Stdev wait: {stdev(waits):.1f}.')
527528
print(f'Median wait: {median(waits):.1f}. Max wait: {max(waits):.1f}.')

0 commit comments

Comments
 (0)