前提・実現したいこと
pythonを使ってWebAPIの結果(json形式)を1つの行列に追記するシステムを並列処理を使って作っています。
発生している問題
同時実行数を増やした場合に一部の結果が格納されない状況となっております。
正しく全ての処理スレッドで結果を格納するためにはどのように変更すればよいでしょうか。
並列処理を使わない場合や、同時実行数が少ない場合は正しく格納されるため、同時に書き込む際にエラーもしくはプログラム作成としてのご法度があると思われます。
スクリプト単体で動作させたいため、データベース等への格納は考慮していません。
ソースコード
python
1import pandas as pd 2from concurrent import futures 3 4columns = ['column_A','column_B','column_C'] 5df = pd.DataFrame(columns = columns ) 6df_0 = pd.DataFrame([[1,2,3]],columns = columns) 7df_1 = pd.DataFrame([[4,5,6]],columns = columns) 8df_2 = pd.DataFrame([[7,8,9]],columns = columns) 9 10def sample_func(index): 11 global df 12 n = index % 3 13 if n == 0: 14 df = df.append(df_0, ignore_index=True ,sort=False) 15 elif n == 1: 16 df = df.append(df_1, ignore_index=True ,sort=False) 17 else: 18 df = df.append(df_2, ignore_index=True ,sort=False) 19 20def main(): 21 future_list = [] 22 with futures.ThreadPoolExecutor(max_workers=10) as executor: 23 for index in range(30): 24 future = executor.submit(fn=sample_func, index=index) 25 future_list.append(future) 26 _ = futures.as_completed(fs=future_list) 27 print(df) 28 29if __name__ == "__main__": 30 main()
補足情報
Pythonのバージョン:3.7
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/08 09:01