小编And*_*son的帖子

Python多处理:如何限制等待进程的数量?

当使用Pool.apply_async运行大量任务(具有大参数)时,将分配进程并进入等待状态,并且对等待进程的数量没有限制.这可能最终会占用所有内存,如下例所示:

import multiprocessing
import numpy as np

def f(a,b):
    return np.linalg.solve(a,b)

def test():

    p = multiprocessing.Pool()
    for _ in range(1000):
        p.apply_async(f, (np.random.rand(1000,1000),np.random.rand(1000)))
    p.close()
    p.join()

if __name__ == '__main__':
    test()
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种限制等待队列的方法,以便只有有限数量的等待进程,并且在等待队列已满时阻塞Pool.apply_async.

python pool multiprocessing

9
推荐指数
1
解决办法
3100
查看次数

编译 Cython 文件时出错:在包中找不到 pxd

尝试从其他包中 cimport pxd 定义。

简单的例子,一个.pxd文件:

cdef inline void a():
    print "a"
Run Code Online (Sandbox Code Playgroud)

b.pyx 文件:

cimport a

def b():
    a.a()
Run Code Online (Sandbox Code Playgroud)

到这里为止,一切正常,并且$ cython b.pyx可以正常工作。

如果我将 a.pxd 移动到一个文件夹,例如libs/,那么我将 b.pyx 更改为:

from libs cimport a

def b():
    a.a()
Run Code Online (Sandbox Code Playgroud)

然后我有错误:

$ cython b.pyx 

Error compiling Cython file:
------------------------------------------------------------
...
from libs cimport a
^
------------------------------------------------------------

b.pyx:1:0: 'a.pxd' not found

Error compiling Cython file:
------------------------------------------------------------
...
from libs cimport a
^
------------------------------------------------------------

b.pyx:1:0: 'libs/a.pxd' not found
Run Code Online (Sandbox Code Playgroud)

但是 libs/a.pxd 就在那里。从其他包导入 pxd 定义的正确方法是什么?

cython

9
推荐指数
1
解决办法
5239
查看次数

标签 统计

cython ×1

multiprocessing ×1

pool ×1

python ×1