- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
这是我使用多处理的示例程序。计算是使用 multiprocessing.Process
完成的,结果是使用 multiprocessing.Queue
收集的。
#THIS PROGRAM RUNS WITH ~40Gb RAM. (you can reduce a,b,c for less RAM
#but then it works for smaller values)
#PROBLEM OCCURS ONLY FOR HUGE DATA.
from numpy import *
import multiprocessing as mp
a = arange(0, 3500, 5)
b = arange(0, 3500, 5)
c = arange(0, 3500, 5)
a0 = 540. #random values
b0 = 26.
c0 = 826.
def rand_function(a, b, c, a0, b0, c0):
Nloop = 100.
def loop(Nloop, out):
res_total = zeros((700, 700, 700), dtype = 'float')
n = 1
while n <= Nloop:
rad = sqrt((a-a0)**2 + (b-b0)**2 + (c-c0)**2)
res_total += rad
n +=1
out.put(res_total)
out = mp.Queue()
jobs = []
Nprocs = mp.cpu_count()
print "No. of processors : ", Nprocs
for i in range(Nprocs):
p = mp.Process(target = loop, args=(Nloop/Nprocs, out))
jobs.append(p)
p.start()
final_result = zeros((700, 700, 700), dtype = 'float')
for i in range(Nprocs):
final_result = final_result + out.get()
p.join()
test = rand_function(a,b,c,a0, b0, c0)
这是错误信息:
Traceback (most recent call last):
File "/usr/lib/python2.7/multiprocessing/queues.py", line 266, in _feed
send(obj)
SystemError: NULL result without error in PyObject_Call
我读了here这是一个错误。但是我无法理解。谁能告诉我使用多处理计算大量数据的任何方法?
非常感谢
最佳答案
您的引用错误报告指出多处理模块无法将巨大的参数推送到子进程。
原因是它需要腌制这些参数并将腌制过的 blob 存储在内存中的某个位置。
但是,您不需要将数组作为参数传递。
可能的原因:
loop
作为目标传递mp.Queue()
作为参数传递请参阅http://stevenengelhardt.com/2013/01/16/python-multiprocessing-module-and-closures/关于将闭包转换为类。
在控制多处理之前设置完整状态。
关于python - 多处理 : NULL result without error in PyObject_Call,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22656285/
我正在用 C 语言编写 native Python 模块,并且对 PyObject_Call 的调用崩溃了。目标是对象的实例方法,它被传递给我的 native 对象的构造函数。 我的自定义对象类型的构
我目前正在编写一个 Python C 扩展,以用 C 而不是 Python 来执行一些计算。它工作得很好,我已经得到了一些不错的结果,但重点是,我收到以下错误: NULL result without
我正在尝试 iTunes SDK 和 Cython。 DLL 入口点似乎可以工作,但使用任何“真正的 Python” 都会导致 iTunes 崩溃。 以下代码可以正常编译,并且 iTunes 可以成功
这是我使用多处理的示例程序。计算是使用 multiprocessing.Process 完成的,结果是使用 multiprocessing.Queue 收集的。 #THIS PROGRAM RUNS
我有一个 wx.py.Shell.shell 小部件,它允许用户执行与我的程序交互的 python 代码。我希望能够将用户在此空间中定义的函数传递到我的 C++ 代码(通过 wxswig 生成的围绕我
我正在使用带有 redish 的 redis-py 和 gevent,我有自己的类 EventBot,它继承自 Greenlet。 在此类的 __init__ 方法中,我正在使用初始化与 redis
我使用 scikit-learn 14.1 中的 sklearn.grid_search.RandomizedSearchCV 类,在运行以下代码时出现错误: X, y = load_svmlight
我是一名优秀的程序员,十分优秀!