スタックオーバーフローのユーザーの皆様、こんにちは。
私はこれを調べようとしましたが、答えを見つけることができませんでした: 私は基本的に関数を並列処理するのが好きで (独立したプロセス!)、関数には 1 つの反復可能な ( x
)といくつかの定数引数 ( k
, d
) があります。以下は、非常に単純化された例です。
from multiprocessing import *
def test_function(args):
k = args[0]
d = args[1]
x = args[2]
del args
return k*x + d
if __name__ == '__main__':
pool = Pool(processes=2)
k = 3.
d = 5.
constants = [k,d]
xvalues = range(0,10)
result = [pool.apply_async(test_function, constants.append(i)) for i in xvalues]
output = [r.get() for r in result]
print output
#I expect [5.0, 8.0, 11.0, 14.0, 17.0, 20.0, 23.0, 26.0, 29.0, 32.0]
これにより、次のエラーメッセージが表示されます。
Traceback (most recent call last):
File "test_function.py", line 23, in <module>
output = [r.get() for r in result]
File "C:\Program Files\Python2.7\lib\multiprocessing\pool.py", line 528, in get
raise self._value
TypeError: test_function() argument after * must be a sequence, not NoneType
だから私の質問は:
このエラー メッセージの実際の意味は何ですか?
期待どおりの結果が得られるように修正するにはどうすればよいですか (コード例の最後の行を参照)。
apply_sync を呼び出す行のより良い/機能する/エレガントな方法はありますか?
参考までに: 私はここで Python を初めて使用します。ご容赦ください。投稿に詳細が必要な場合はお知らせください。
ご提案いただきありがとうございます。