【发布时间】:2021-09-07 06:12:29
【问题描述】:
更新:将我的 Spyder 更新到 5.0.5 后它可以工作了。谢谢大家!
我正在尝试使用多处理来加速循环。下面的代码旨在生成 10000 个随机向量。
我的想法是将任务拆分为5个进程并存储在result中。但是,当我运行代码时,它返回了一个空列表。
但是,如果我在 randomize_data 函数中删除 result = add_one(result),代码运行完美。因此,错误一定来自在多处理中使用其他模块 (Testing.test) 中的函数。
这是来自Testing.test 的add_one 函数:
def add_one(x):
return x+1
如何在进程内使用其他模块的功能?谢谢。
import multiprocessing
import numpy as np
import pandas as pd
def randomize_data(mean, cov, n_init, proc_num, return_dict):
result = pd.DataFrame()
for _ in range(n_init):
temp = np.random.multivariate_normal(mean, cov)
result = result.append(pd.Series(temp), ignore_index=True)
result = add_one(result)
return_dict[proc_num] = result
if __name__ == "__main__":
from Testing.test import add_one
mean = np.arange(0, 1, 0.1)
cov = np.identity(len(mean))
manager = multiprocessing.Manager()
return_dict = manager.dict()
jobs = []
for i in range(5):
p = multiprocessing.Process(target=randomize_data, args=(mean, cov, 2000, i, return_dict, ))
jobs.append(p)
p.start()
for proc in jobs:
proc.join()
result = return_dict.values()
【问题讨论】:
标签: python multiprocessing python-multiprocessing multiprocessing-manager