improve multiprocessing
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
|
import os
|
||||||
from concurrent.futures import ProcessPoolExecutor, as_completed
|
from concurrent.futures import ProcessPoolExecutor, as_completed
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
|
|
||||||
@@ -86,41 +87,46 @@ def run_simulation(n_servers=2, lam=40):
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
with ProcessPoolExecutor(max_workers=4) as executor:
|
if __name__ == "__main__":
|
||||||
n_servers = [n + 1 for n in range(10)]
|
with ProcessPoolExecutor(max_workers=os.cpu_count()) as executor:
|
||||||
lam = [(n + 1) * 4 for n in range(10)]
|
n_servers = [n + 1 for n in range(10)]
|
||||||
parameter_values = [
|
lam = [(n + 1) * 4 for n in range(10)]
|
||||||
{"n_servers": n, "lam": m} for n in n_servers for m in lam for _ in range(10)
|
parameter_values = [
|
||||||
]
|
{"n_servers": n, "lam": m}
|
||||||
futures = [
|
for n in n_servers
|
||||||
executor.submit(run_simulation, **parameters) for parameters in parameter_values
|
for m in lam
|
||||||
]
|
for _ in range(100)
|
||||||
|
]
|
||||||
|
futures = [
|
||||||
|
executor.submit(run_simulation, **parameters)
|
||||||
|
for parameters in parameter_values
|
||||||
|
]
|
||||||
|
|
||||||
results = []
|
results = []
|
||||||
for future in tqdm(as_completed(futures), total=len(parameter_values)):
|
for future in tqdm(as_completed(futures), total=len(parameter_values)):
|
||||||
result = future.result()
|
result = future.result()
|
||||||
results.append(result)
|
results.append(result)
|
||||||
|
|
||||||
df = (
|
df = (
|
||||||
pl.DataFrame(results)
|
pl.DataFrame(results)
|
||||||
.fill_null(0)
|
.fill_null(0)
|
||||||
.group_by(["n_servers", "lam"])
|
.group_by(["n_servers", "lam"])
|
||||||
.agg(pl.all().mean())
|
.agg(pl.all().mean())
|
||||||
.sort(["n_servers", "lam"])
|
.sort(["n_servers", "lam"])
|
||||||
)
|
|
||||||
|
|
||||||
df_queue_time = df.pivot("lam", index="n_servers", values="queue_time").sort(
|
|
||||||
"n_servers"
|
|
||||||
)
|
|
||||||
|
|
||||||
def stats(column):
|
|
||||||
return (
|
|
||||||
df.pivot("lam", index="n_servers", values=column)
|
|
||||||
.sort("n_servers")
|
|
||||||
.with_columns(pl.all().round(2))
|
|
||||||
)
|
)
|
||||||
|
|
||||||
pl.Config.set_tbl_cols(20)
|
df_queue_time = df.pivot("lam", index="n_servers", values="queue_time").sort(
|
||||||
print(df)
|
"n_servers"
|
||||||
print(stats("queue_time"))
|
)
|
||||||
print(stats("utilization_server_1"))
|
|
||||||
|
def stats(column):
|
||||||
|
return (
|
||||||
|
df.pivot("lam", index="n_servers", values=column)
|
||||||
|
.sort("n_servers")
|
||||||
|
.with_columns(pl.all().round(2))
|
||||||
|
)
|
||||||
|
|
||||||
|
pl.Config.set_tbl_cols(20)
|
||||||
|
print(df)
|
||||||
|
print(stats("queue_time"))
|
||||||
|
print(stats("utilization_server_1"))
|
||||||
|
|||||||
Reference in New Issue
Block a user