python - 编写并行循环

标签 python windows parallel-processing joblib

我正在尝试在一个简单示例上运行并行循环。
我做错了什么?

from joblib import Parallel, delayed  
import multiprocessing

def processInput(i):  
        return i * i

if __name__ == '__main__':

    # what are your inputs, and what operation do you want to 
    # perform on each input. For example...
    inputs = range(1000000)      

    num_cores = multiprocessing.cpu_count()

    results = Parallel(n_jobs=4)(delayed(processInput)(i) for i in inputs) 

    print(results)

代码的问题在于,当在 Python 3 的 Windows 环境下执行时,它会打开 num_cores 个 python 实例来执行并行作业,但只有一个处于事件状态。这不应该是这种情况,因为处理器的事件应该是 100% 而不是 14%(在 i7 - 8 逻辑内核下)。

为什么额外的实例什么都不做?

最佳答案

继续您提供工作多处理代码的请求,我建议您使用 pool_map (如果延迟功能不重要),我会给你举个例子,如果你在 python3 上工作值得一提,你可以使用 starmap。 另外值得一提的是,如果返回结果的顺序不必与输入的顺序相对应,则可以使用 map_sync/starmap_async。

import multiprocessing as mp

def processInput(i):
        return i * i

if __name__ == '__main__':

    # what are your inputs, and what operation do you want to
    # perform on each input. For example...
    inputs = range(1000000)
    #  removing processes argument makes the code run on all available cores
    pool = mp.Pool(processes=4)
    results = pool.map(processInput, inputs)
    print(results)

关于python - 编写并行循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33787678/

相关文章:

c++ - 使用哪个代码片段来处理 USB 设备插入?

python - multiprocessing.Pool.map_async() 的结果是否以与输入相同的顺序返回?

Python:如何使用 SQLAlchemy 访问 MySQL 数据库表

python - 每次函数运行时增加计数

python - windows 的二进制 python 包(模块)的无人值守安装

c# - 使用 Parallel.Foreach 时的意外行为

parallel-processing - GPU MHZ 利用率

python - 如何将两个列表合并到字典中并对重复键的值求和

python - 张量的形状为 [?, 0]——如何 reshape 为 [?,]

c++ - 将位图保存到从中加载的同一文件