gpt4 book ai didi

Python多处理: Extracting results

转载 作者:行者123 更新时间:2023-12-01 08:19:46 26 4
gpt4 key购买 nike

我正在尝试在 Python 中运行大量模拟,因此我尝试使用多处理来实现它。

import numpy as np
import matplotlib.pyplot as plt
import multiprocessing as mp
import psutil

from Functions import hist, exp_fit, exponential

N = 100000 # Number of observations
tau = 13362.525 # decay rate to simulate
iterations = 1 # Number of iterations for each process
bin_size = 1*1e9 # in nanoseconds

def spawn(queue):
results = []
procs = list()
n_cpus = psutil.cpu_count()
for cpu in range(n_cpus):
affinity = [cpu]
d = dict(affinity=affinity)
p = mp.Process(target=run_child, args=[queue], kwargs=d)
p.start()
procs.append(p)
for p in procs:
results.append(queue.get)
p.join()
print('joined')
return results

def run_child(queue, affinity):
proc = psutil.Process() # get self pid
proc.cpu_affinity(affinity)
print(affinity)
np.random.seed()
for i in range(iterations):
time = np.sort(-np.log(np.random.uniform(size=N)) * tau) * 1e9
n, bins = hist(time, bin_size)
fit = exp_fit(n, bins, silent=True)
queue.put(fit)

if __name__ == '__main__':
output = mp.Queue()
plt.figure()
results = spawn(output)
bins = range(1000)
for fit in results:
plt.plot(bins, exponential(fit.params, bins), 'k-', alpha=0.1)
plt.show()

我的尝试深受 this 的启发。我在尝试自己寻找解决方案时发现了答案,其中每个进程的亲和性被手动设置为 numpy 显然改变了默认行为(如果不这样做,它只在单个核心上运行)。

我认为代码大部分都有效;每个过程都会按预期执行模拟和拟合,但我不知道如何提取结果。现在看来,run_child方法中的queue.put(fit)似乎导致程序停止。

关于为什么会发生这种情况以及如何解决它有什么想法吗?

最佳答案

问题在于尝试将 OptimizeResult 数据类型传递到队列。仅从配合中提取必要的数据并传球,这反而像魅力一样发挥作用。

感谢 Pierre-Nicolas Piquin 帮助解决这个问题!

关于Python多处理: Extracting results,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54724446/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com