我想通过使用python中的pool和map函数来获得输出,具体如下。
**按随机顺序输出。
PoolWorker-10输出: [0, 4, 8, 12, 16, 20]
PoolWorker-11输出。[0, 4, 8, 12, 16, 20]
PoolWorker-12输出。[0, 4, 8, 12, 16, 20]
PoolWorker-1输出。[0, 4, 8, 12, 16, 20]
.....**
我多次尝试将输出结果和current_process名称写在一起,但都失败了。我不知道应该改变哪一项才能得到上面那样的打印输出。
from multiprocessing import Pool, current_process
def multiprocessing_func():
input_list = [0, 1, 2, 3, 4, 5]
print("input list: {}".format(input_list))
print("Output in random order: ")
pool = Pool(10, current_process_func)
result = pool.map(calculate, input_list)
print(result)
pool.close()
pool.join()
def calculate(y_list):
return y_list * 4
def current_process_func():
print("{} output: ".format(current_process().name))
if __name__ == '__main__':
multiprocessing_func()
当我运行它时,我得到的结果是这样的。
按随机顺序输出:
PoolWorker -1输出:
PoolWorker-2输出:
PoolWorker-3输出:
PoolWorker-4输出:PoolWorker-5输出:PoolWorker-4输出
PoolWorker-5输出:PoolWorker-7输出:PoolWorker-6输出
PoolWorker-7输出:PoolWorker-7输出
PoolWorker-6输出。
[0, 4, 8, 12, 16, 20]
PoolWorker-8输出。
PoolWorker -9输出:
PoolWorker-10输出。
我应该怎么改才能得到我想要的结果?
修改了你的代码段,如下图所示。总体考虑如下。
pool.map(func, data)
data应该被理解为分布在cpu池中的数据(也是这个进程的专属数据)。进一步说至少应该有和进程一样多的项目,以充分利用池子。我只是把10个相同的列表放在那里)。
中跳过了初始化参数。Pool()
构,只需在计算完成后输出想要的数据即可。
from multiprocessing import Pool, current_process
def multiprocessing_func():
input_list = [0, 1, 2, 3, 4, 5]
print("input list: {}".format(input_list))
print("Output in random order: ")
pool = Pool(10)
result = pool.map(calculate, [input_list]*10)
print()
print("collected:" , result)
pool.close()
pool.join()
def calculate(y_list):
out = [x*4 for x in y_list]
current_process_func(out)
return out
def current_process_func(data):
print("{} output: {}".format(current_process().name, data))
if __name__ == '__main__':
multiprocessing_func()
导致。
input list: [0, 1, 2, 3, 4, 5]
Output in random order:
ForkPoolWorker-52 output: [0, 4, 8, 12, 16, 20]
ForkPoolWorker-55 output: [0, 4, 8, 12, 16, 20]
ForkPoolWorker-57 output: [0, 4, 8, 12, 16, 20]
ForkPoolWorker-51 output: [0, 4, 8, 12, 16, 20]
ForkPoolWorker-53 output: [0, 4, 8, 12, 16, 20]
ForkPoolWorker-54 output: [0, 4, 8, 12, 16, 20]
ForkPoolWorker-56 output: [0, 4, 8, 12, 16, 20]
ForkPoolWorker-58 output: [0, 4, 8, 12, 16, 20]
ForkPoolWorker-60 output: [0, 4, 8, 12, 16, 20]
ForkPoolWorker-59 output: [0, 4, 8, 12, 16, 20]
collected: [[0, 4, 8, 12, 16, 20], [0, 4, 8, 12, 16, 20], [0, 4, 8, 12, 16, 20], [0, 4, 8, 12, 16, 20], [0, 4, 8, 12, 16, 20], [0, 4, 8, 12, 16, 20], [0, 4, 8, 12, 16, 20], [0, 4, 8, 12, 16, 20], [0, 4, 8, 12, 16, 20], [0, 4, 8, 12, 16, 20]]
这是你所期望的吗?