trying my hands at multiprocessing, fails miserably because global variables...

This commit is contained in:
Aaro Koivukangas
2023-12-13 13:30:58 +02:00
parent 1f1b1a5729
commit 095febd335
+53 -6
View File
@@ -1,19 +1,66 @@
from multiprocessing import Pool, cpu_count
LOWEST = float("inf")
def main(): def main():
lines = read_input() lines = read_input()
seeds = lines[0].split(" ") seeds = lines[0].split(" ")
seeds = [int(seed) for seed in seeds[1:]] seeds = [int(seed) for seed in seeds[1:]]
# hups muisti loppuu :D
seeds_2 = []
for i in range(0, len(seeds), 2):
seeds_2 += all_in_range(seeds[i], seeds[i+1])
res_1 = solve(lines, seeds) res_1 = solve(lines, seeds)
res_2 = solve(lines, seeds_2) print(res_1)
# hups muisti loppuu :D
pool = Pool(processes=(cpu_count() - 1))
for i in range(0, len(seeds), 2):
for x in range(seeds[i+1]):
pool.map(solve_2, [(lines, seeds[i] + x)])
print(f"{i}/{len(seeds)} - {x/seeds[i+1]:.2f}%: {x} --- {LOWEST}")
pool.close()
pool.join()
res_2 = LOWEST
print(res_2)
return res_1, res_2 return res_1, res_2
def solve_2(data):
lines = data[:-1]
seed = data[-1]
global LOWEST
transformed_seed = float("inf")
for line in lines[1:]:
if not line.strip() or line[-1] == ":":
if transformed_seed == float("inf"):
transformed_seed = seed
seed = transformed_seed
transformed_seed = float("inf")
continue
if transformed_seed != float("inf"):
continue
values = line.split(" ")
destination_start_range = int(values[0])
source_start_range = int(values[1])
count = int(values[2])
if in_range(seed, source_start_range, count):
if transformed_seed == float("inf"):
transformed_num = transform_seed_to_dest(seed, source_start_range, destination_start_range)
transformed_seed = transformed_num
if transformed_seed == float("inf"):
transformed_seed = seed
seed = transformed_seed
LOWEST = seed if seed < LOWEST else LOWEST
#print(LOWEST)
def solve(lines, seeds): def solve(lines, seeds):
transformed_seeds = [0] * len(seeds) transformed_seeds = [0] * len(seeds)