私はかなり初心者のプログラマーで、初めてマルチプロセッシングに手を入れています。通常の酸洗エラーに遭遇した後、ここで検索したところ、Pathos が使用するのに最適である可能性が高いことがわかりました。
アプリケーション全体の要点は、ssh を使用してサーバーのコレクションに接続し、データを引き出してデータベースに保存することです。それはうまく機能しますが、マルチプロセッシングを実行すると明らかに有益です。
元の関数呼び出しは次のようになります。
devices = sq.sqlOperation("SELECT * from Devices")
for device in devices:
pullNewData(device)
要するに、SQL クエリは辞書のリストを提供し、pullNewData() に各レコードの辞書をフィードし、接続し、すべてをプルし、データベースを更新します。
数千行のコードを書き直したくないので、簡単に適応できることを願っています。次の例はすべて次のとおりです。
from pathos.multiprocessing import ProcessingPool as Pool
頂点で。私はもう試した:
devices = sq.sqlOperation("SELECT * from Devices")
p = Pool(4)
p.apipe(pullNewData, devices)
try/except で丸めたとしても、静かに失敗しました
devices = sq.sqlOperation("SELECT * from Devices")
p = Pool(4)
p.map(pullNewData, devices)
同じ、サイレント失敗:
でも:
devices = sq.sqlOperation("SELECT * from Devices")
p = Pool(4)
for data in devices:
p.apipe(pullNewData(data))
動作しましたが、それぞれを順番に実行しただけです。
必死になって、それをリスト内包表記の中に入れようとさえしました(はい、これは恐ろしく醜いですが、その時点で私は何でもしたでしょう)
devices = sq.sqlOperation("SELECT * from Devices")
p = Pool(4)
[ p.apipe(pullNewData(data)) for data in devices ]
それで、どうすればこれを行うことができますか?各レコードの新しい接続を並行して起動するにはどうすればよいですか?