python(47): マルチスレッド・マルチプロセスアプリケーション - バッチデータ作成の概要

1. データ要件の作成

110万レベル数量

1.2 複数の dbf ファイルを書き込みます。各 dbf ファイルは 2 つの SQL ファイルに関連付けられます。関連付けられた列は 1.3 の累積列です。

1.3 dbf ファイルの 2 つの列はグローバルに一意かつ累積的であり、一部の列はランダムに生成されます。

1.4 SQL ファイルの 3 つの列はグローバルに一意かつ累積的であり、一部の列はランダムに生成されます。

考慮すべき事項: CPU、ネットワーク、ディスク IO の読み取りおよび書き込み速度

2. 実施計画

2.1 シリアル実行

100,000 行のデータ

dbf および関連する sql1、sql2 ファイルを作成します。3 分 21 秒  - CPU 占有率 12% (12% 勝利、Linux 環境は 100%)、約 (8 コア システム、単一 CPU が完全に占有)

2.2 マルチスレッド並列処理、スレッドロックはグローバル一意変数をロックします

100,000 行のデータ

2 つの dbf ファイルとそれに関連する sql1 および sql2 ファイルの作成には 7 分かかります   。2.1 によると、CPU 使用率は通常の時間です。

2.3 マルチプロセス並列処理、プロセスロックはグローバル固有変数をロックします

100,000 行のデータ

dbf ファイルと関連する sql1、sql2 ファイルを作成します。時間は 7 分と 05 分です--プロセスロックの切り替えにかかる時間

4 つの dbf ファイル + 関連する sql1、sql2 ファイルを作成、時間は 12 分 06 秒、

データの各行にはロック要求が必要であるため、この状況はロックを使用してグローバルに一意な変数を割り当てるのには適していません。ロックの待機が CPU パフォーマンスの完全な使用に影響を与えるのを防ぐために、2.4 ソリューションが採用されています。

2.4 マルチプロセス並列処理。プロセスロックは使用されず、各プロセスが使用するグローバルに一意な変数範囲は、生成されるデータの量に応じて事前に割り当てられます。

100,000 行のデータ

dbf ファイルと関連する sql1、sql2 ファイルを作成します。時間は 3 分 39 です。

4 つの dbf ファイル + 関連する sql1、sql2 ファイルを作成、時間は 4 分 02 秒-- 4 つの Python プロセス、それぞれ約 12% を占有 (8 コア システム)

100万行のデータ

4 つの dbf ファイル + 関連する sql1、sql2 ファイルを作成、所要時間は 33 分 48 秒- 予想どおり

3. まとめ

3.1 ネットワークの最適化:

ツールで環境アカウント情報などを取得する場合は、ネットワーク経由でサーバーのデータベースに該当するデータを要求する必要があります。

最適化方法:最初の取得後にキャッシュし、その後データを作成するときに最初にキャッシュを検索します

3.2CPU 使用率の最適化:

マルチプロセスの利用

3.3 計画の概要:

2.4 が最適な解決策です。複数の dbf ファイルを同時に作成すると、各作成プロセスが対応するプロセスを開始し、動作中に各プロセスが CPU の約 12% を占有します (8 コア システムは完全に占有されます)。 、sql1、sql2 ファイルはシリアルに実行されます。

上記の実践はすべて 10w に基づいているため、数千万のデータを乗算するのに必要な時間は、倍数にすると約 35 ~ 40 分になります。

注: 作成されるファイルの数 (プロセス数) がシステム コアの数を超える場合、全体の時間は 1 つのファイルを作成する時間の倍数になります。

例:

8 コア システム - 10 行のデータ:

単一ファイル - 3 分、

1 ~ 8 個のファイルを同時に作成 ~= 3 分、

9 ~ 16 個のファイルを同時に作成 ~= 6 分  

ツールの現在のデータ時間は上記の統計値であり、実行環境のCPU性能やディスク書き込み速度に影響されますので、より高性能なマシンに交換した場合はさらに短縮されます。

おすすめ

転載: blog.csdn.net/qq_37674086/article/details/126282087