0
ラズベリー・ピー3(4コア)上で稼働する株価機械学習アプリケーションでマルチプロセッシングを使用しようとしています。Python Concurrent ProcessPoolExecutorがRaspberry Pi(アイドルPython 3.4.2)で動作しません
from concurrent import futures
def some_function(x):
return x + 1
def main_function(some_list):
with futures.ProcessPoolExecutor() as executor:
results = executor.map(some_function, some_list)
return results
if __name__ == '__main__':
print(main_function([1, 2, 3]))
私はこれを実行すると、私はすぐにプロセスがまだ実行されている、と私はそれを殺すためにかどうかを確認されたというメッセージが出ます:ここでの問題を示しているいくつかのコードがあります。 「OK」を押すかどうかに関係なく、プログラムは結果やエラーを生成しません。
ProcessPoolExecutorをThreadPoolExecutorに変更すると問題が解決され、プログラムはジェネレータオブジェクトを期待どおりに配信します。
多くのお客様に感謝します。私はそれがジェネレータオブジェクトを返すことを理解し、ThreadPoolExecutorもジェネレータを返します。しかし、問題は返される値ではなく、ThreadPoolExecutorがジェネレータ(またはあなたの編集ではリスト)を返すのに対し、ProcessPoolExecutorは何も返しません(提案された編集でも)。私は今、それがアイドルのバグであると信じています - スクリプトは端末で正しく動作します。 – pythonbutcher
私の修正では、スクリプトはあらかじめジェネレータを印刷していた端末で正しく動作します。ブラインドの推測:with文の中の 'return list(results)'行をインデントしてみてください。それは役に立ちますか?ここでの問題の1つは、with文がコールをブロックしていない可能性があり、Idleがスクリプトが終了したと考えることができないことです。 – noxdafox
いいえ、恐れることはありません。それはgeany/terminalと同じように動作しますが、問題があると思われるアイドルです。再度、感謝します – pythonbutcher