itemsは配列でその下に多数のオブジェクトが格納されています。
現在は、シングルスレッドで一つずつ処理していますが
マルチスレッドで並列処理させたいです。
私の方で100件ずつ処理するプログラムを考えましたが
いかんせん、初心者のためヘンテコな構造となっております。
1つの配列に対してマルチスレッドで処理する方法をご教示頂けないでしょうか
single
1items =[ 2 {'blog': 'blog1', 'count': '111', 'user_name': 'user1'}, 3 {'blog': 'blog2', 'count': '112', 'user_name': 'user2'}, 4 {'blog': 'blog3', 'count': '113', 'user_name': 'user3'}, 5 ・ 6 ・ 7 ・ 8 {'blog': 'blog1000', 'count': '11113', 'user_name': 'user1000'} 9 ] 10 11 table = dynamodb.Table('Movies') 12 for item in items: 13 response = table.put_item(Item=item)
Multithread
1items =[ 2 {'blog': 'blog1', 'count': '111', 'user_name': 'user1'}, 3 {'blog': 'blog2', 'count': '112', 'user_name': 'user2'}, 4 {'blog': 'blog3', 'count': '113', 'user_name': 'user3'}, 5 ・ 6 ・ 7 ・ 8 {'blog': 'blog1000', 'count': '11113', 'user_name': 'user1000'} 9 ] 10 11 process_list = [] 12 with ThreadPoolExecutor() as executor: 13 i = 0 14 table = dynamodb.Table('Movies') 15 for item in items: 16 if i > 100: 17 process_list.append(executor.submit(table.put_item(Item=item))) 18 elif i > 200: 19 process_list.append(executor.submit(table.put_item(Item=item))) 20 ・ 21 ・ 22 ・ 23 elif i > 900: 24 process_list.append(executor.submit(table.put_item(Item=item))) 25 else: 26 process_list.append(executor.submit(table.put_item(Item=item))) 27 28 i+=1 29 for process in process_list: 30 print(process.result())
↓
items =[ {'blog': 'blog1', 'count': '111', 'user_name': 'user1'}, {'blog': 'blog2', 'count': '112', 'user_name': 'user2'}, {'blog': 'blog3', 'count': '113', 'user_name': 'user3'}, ・ ・ ・ {'blog': 'blog1000', 'count': '11113', 'user_name': 'user1000'} ] #リスト分ける newList = split_list(items,100) #スレッドプールを作る tpe = ThreadPoolExecutor(max_workers=100) for _ in range(newList.len): tpe.submit(put_to_db) tpe.shutdown() print("完了") #リストを分ける処理 def split_list(l, n): for idx in range(0, len(l), n): return l[idx:idx + n] #DBに登録する処理 def put_to_db(Items): table = dynamodb.Table('Movies') for item in Items: response = table.put_item(Item=item)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/29 10:50 編集
2021/01/29 11:08
2021/02/01 01:41
2021/02/01 04:55
2021/02/01 06:14
2021/02/01 06:39
2021/02/01 07:33