-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsimple_server.py
More file actions
75 lines (56 loc) · 2.14 KB
/
Copy pathsimple_server.py
File metadata and controls
75 lines (56 loc) · 2.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#!/usr/bin/env python3
"""
Simple Server Example
This example demonstrates a basic single-server queueing system
using the PDQ Python interface.
"""
import pdq
def main():
"""Run simple server example"""
print("=== Simple Server Example ===\\n")
# Model parameters
num_users = 50
think_time = 10.0 # seconds between requests
service_time = 0.5 # seconds per request
print(f"Model Parameters:")
print(f" Users: {num_users}")
print(f" Think time: {think_time} sec")
print(f" Service time: {service_time} sec")
print()
# Create PDQ model
model = pdq.PDQModel("Simple Web Server")
model.set_comment("Single server with terminal users")
# Build the model
model.create_node("WebServer", pdq.CEN, pdq.FCFS)
model.create_closed("Users", pdq.TERM, num_users, think_time)
model.set_demand("WebServer", "Users", service_time)
# Set units for better reporting
model.set_work_unit("Requests")
model.set_time_unit("Seconds")
# Solve the model
print("Solving model...")
model.solve(pdq.EXACT)
print("Model solved successfully\\n")
# Get performance metrics
response_time = model.get_response(pdq.TERM, "Users")
throughput = model.get_throughput(pdq.TERM, "Users")
utilization = model.get_utilization("WebServer", "Users", pdq.TERM)
queue_length = model.get_queue_length("WebServer", "Users", pdq.TERM)
print(f"Performance Results:")
print(f" Response time: {response_time:.3f} sec")
print(f" Throughput: {throughput:.3f} req/sec")
print(f" Utilization: {utilization*100:.1f}%")
print(f" Queue length: {queue_length:.3f} requests")
print()
# Show bounds analysis
max_throughput = model.get_max_throughput(pdq.TERM, "Users")
optimal_load = model.get_optimal_load(pdq.TERM, "Users")
print(f"Bounds Analysis:")
print(f" Max throughput: {max_throughput:.3f} req/sec")
print(f" Optimal load: {optimal_load:.1f} users")
print()
# Generate full report
print("=== Full PDQ Report ===")
model.print_report()
if __name__ == "__main__":
main()