将任务分配给每个单独的核心
Allocating a task to each separate core
代码:
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
代码:
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