python - 将任务分配给每个单独的核心

标签 python multiprocessing python-multiprocessing

代码:

import multiprocessing,pdb

def do_calculation(data):
    print"check %d"%(data)
    return data * 2

def start_process():
    print 'Starting', multiprocessing.current_process().name

if __name__ == '__main__':
    inputs = list(range(10)) 
    pool_size = multiprocessing.cpu_count()
    pool = multiprocessing.Pool(processes=pool_size,
                                initializer=start_process,)
    pool_outputs= pool.map(do_calculation, inputs)
    pool.close() # no more tasks
    pool.join()  # wrap up current tasks
    print 'Pool    :', pool_outputs

输出:

Starting PoolWorker-1
check 0
check 1
check 2
check 3
check 4
check 5
check 6
check 7
check 8
check 9
Starting PoolWorker-2
Starting PoolWorker-3
Starting PoolWorker-4
Starting PoolWorker-5
Starting PoolWorker-6
Starting PoolWorker-7
Starting PoolWorker-8
Pool    : [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

我想在每个核心上运行 CPU 密集型任务,每个核心都执行一个实例。在上面的例子中,我发现只有核心在完成所有的工作。 (我也关心池中的输出顺序。)

我是否做错了什么或误解了 I/O 输出?

最佳答案

函数do_calculation的工作并不现实。它跑得这么快。所以它甚至在其他工作人员开始之前就结束了。

如果您让该函数执行更多工作,您就会看到差异。例如,

import time

def do_calculation(data):
    time.sleep(1)  # <----
    print"check %d"%(data)
    return data * 2

关于python - 将任务分配给每个单独的核心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32001476/

相关文章:

java - 执行异步任务的 java 方法的返回值

nlp - 在 spacy 中读取文本文件的语料库

python - 美国格式的电话号码到 Python 中的链接

python - 在 Python 中切片文件

python - 跨多进程共享基于异步等待协程的复杂对象

python - 使用 python 的多处理在 celery 工作人员和 Flask 之间共享列表

python - 在python进程之间共享tkinter窗口对象

python - 在不 fork 的情况下在 Python 中生成一个进程

python - Openmesh:使用 Python 更新面法线比使用 C++ 更快?

Python:类型错误:无法将序列乘以 str 类型的非 int