簡體   English   中英

Python2:使用具有多個參數的工人池進行多處理

[英]Python2: multiprocessing using a Pool of workers with multiple arguments

我想在 python-2.x 中使用multiprocessing.Pool嘗試並行計算。

我想出了以下簡單的代碼。 不幸的是,我無法產生任何錯誤消息。

有人可以指出我的代碼可能有什么問題的正確方向嗎?

import numpy as np
import multiprocessing as mp
import timeit

def fun(i,j):
    return i+j

num=2

num_cores = mp.cpu_count()
p = mp.Pool(num_cores)

results = np.array([])
tasks = np.array([(i, j) for i in range(0,num) for j in range(0, num)])

if __name__ == '__main__':
    results = np.array(p.map(fun,tasks))
    print results

您在這里遇到的主要問題是,您想作為參數傳遞給工作人員的元組被包裝在numpy.ndarray ,因此它只是一個參數,因為numpy.ndarray沒有展開。


這應該適合你:

from __future__ import print_function
import numpy as np
import multiprocessing as mp
import timeit

def fun(ij):
    s = sum(ij)
    print('{0} + {1} = {2}'.format(ij[0], ij[1], s))
    return s

num=2

num_cores = mp.cpu_count()
p = mp.Pool(num_cores)

results = np.array([])
tasks = np.array([(i, j) for i in range(0,num) for j in range(0, num)])

if __name__ == '__main__':
    results = np.array(p.map(fun,tasks))
    print(results)

這個腳本的輸出是:

0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 2
[0 1 1 2]

我添加了from __future__ import print_function語句,看看這里有什么好處。 這是根據 PEP 3105 - 使打印功能


結束語:更全的解決方案,可以發現這里從用戶senderle。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM