python多进程固定

标签 python concurrency numpy multiprocessing

我目前正在使用 python 多进程进行一些简单的并行编程。 我使用异步装饰器

def async(decorated):
    module = getmodule(decorated)
    decorated.__name__ += '_original'
    setattr(module, decorated.__name__, decorated)
    def send(*args, **opts):
        return async.pool.apply_async(decorated, args, opts)
    return send

然后

@async
def evalfunc(uid, start, end):
        veckernel(Posx, Posy, Posz, Quant, Delta)
        return (uid, GridVal)

def runit(outdir):
    async.pool = Pool(8)
    results = []
    for uid in range(8):
        result = evalfunc(uid,Chunks[uid], Chunks[uid+1])
            results.append(result)

如果我在 8 处理器或 8 核机器上运行它,它基本上只使用两个核。这是为什么?有没有办法像使用 pthreads 一样进行适当的核心固定?

非常感谢, 标记

最佳答案

如果 apply_async 调用的函数(例如 evalfunc)很快完成,则池中的所有工作进程可能不会被利用。

如果这确实是您的情况,那么您需要将更多数据传递给对 evalfunc 的每次调用,以便每个进程都有更多需要处理的内容。

关于python多进程固定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6829351/

相关文章:

python - Tensorflow 模型预测很慢

python - 如何使用 groupby 和过滤数据框来创建新列

java - Java 的 java.util.concurrent 包的 .NET 等价物是什么?

python - 如何避免稀疏矩阵的循环?

python - 使用 textblob ngram 保留缩写

python - ListView 缺少 QuerySet。定义 ListView.model、ListView.queryset 或覆盖 ListView.get_queryset()

java - 当线程在 wait() 上阻塞时被中断会发生什么?

Java线程压力测试

python - 当 poly1d 是非常大的整数时,它们会给出错误的系数

python - 根据特定条件创建新行并迭代 pandas 中的列表