График результатов (25 повторений)
Это мой код времени.
Код: Выделить всё
def timeBlock(func, n, rep):
start = time.perf_counter()
for i in range(rep):
func(n)
end = time.perf_counter()
return (end - start)/rep
def worker(args):
func, n, rep = args
try:
elapsed = timeBlock(func, n, rep)
return n, elapsed, None
except Exception as e:
return n, float("inf"), traceback.format_exc()
def trackFuncs(funcs):
results = {name: [] for name in funcs.keys()}
numProcesses = max(1, cpu_count() - 1)
pool = Pool(processes=numProcesses)
try:
for name, func in funcs.items():
n = 0
progressBar = tqdm(desc=f"Tracking {name}", unit="", dynamic_ncols=True)
while True:
tasks = [(func, n + i, REPEATS) for i in range(numProcesses)]
try:
asyncResults = pool.imap_unordered(worker, tasks)
for result in asyncResults:
n, elapsed, error = result
if error:
print(f"Error for {name} at n={n}:\n{error}")
continue
results[name].append((n, elapsed))
if elapsed > MAXT:
progressBar.close()
print(f"Reached {MAXT}s for {name} at n={n}")
raise StopIteration
except StopIteration:
break
n += numProcesses
progressBar.update(numProcesses)
progressBar.close()
except KeyboardInterrupt:
print("\nProcess interrupted by user")
finally:
pool.close()
pool.terminate()
pool.join()
return results
< /code>
funcsЛюбые идеи, почему это происходит и как, если возможно, это может быть исправлено?
Подробнее здесь: https://stackoverflow.com/questions/793 ... neration-b