假设:有个数据操作,处理100万条数据,每个数据的value+1。如简单代码假设
for x in range(1,100): x++
从数据库获取100条了,然后想多进程去执行x++?还是说多进程去数据库获取数据?谢谢了
业精于勤,荒于嬉;行成于思,毁于随。
質問があります: それがデータベース内のデータである場合、SQL を実行しないのはなぜですか? これはマルチプロセスよりもはるかに効率的です。 指定された 2 つのうちの 1 つを選択する必要がある場合は、次のことを検討してください。 リーリー
まずプロデューサーとして元のデータをキュー(キュー)に格納します 次にキューからデータを取得し、操作を実行し、コンシューマーとして動作しますこのとき、コンシューマー上で複数のスレッドを開くことができます(もちろん、ロックをうまく処理すれば、プロデューサーはマルチスレッドも実行できます)
キュー内に常に要素が存在する場合、スレッドは動作を継続します。
実際、Python でマルチ処理を実装する最良の方法は multiprocessing中的map
multiprocessing
map
例 (Python 3):
上記のように、データ読み込みとデータ+1の2つの関数を直接1つのオペレーションに記述し、複数のプロセスで動作させることができます。 CPU コアの数に応じてプロセス プールのサイズを設定します。複数のプロセス間でメモリ共有や直接通信がないため、最初に複数のプロセスを使用してデータベースからすべてのデータを読み取り、次に複数のプロセスを使用して val+1 を実行できます
質問があります: それがデータベース内のデータである場合、SQL を実行しないのはなぜですか? これはマルチプロセスよりもはるかに効率的です。
指定された 2 つのうちの 1 つを選択する必要がある場合は、次のことを検討してください。 リーリー
まずプロデューサーとして元のデータをキュー(キュー)に格納します
リーリー次にキューからデータを取得し、操作を実行し、コンシューマーとして動作します
このとき、コンシューマー上で複数のスレッドを開くことができます(もちろん、ロックをうまく処理すれば、プロデューサーはマルチスレッドも実行できます)
キュー内に常に要素が存在する場合、スレッドは動作を継続します。
実際、Python でマルチ処理を実装する最良の方法は
を使用することです。multiprocessing
中的map
例 (Python 3):
リーリー リーリー上記のように、データ読み込みとデータ+1の2つの関数を直接1つのオペレーションに記述し、複数のプロセスで動作させることができます。 CPU コアの数に応じてプロセス プールのサイズを設定します。複数のプロセス間でメモリ共有や直接通信がないため、最初に複数のプロセスを使用してデータベースからすべてのデータを読み取り、次に複数のプロセスを使用して val+1 を実行できます