azure functions(Python)を使って、azure table storageに存在するサイズの大きめなtable(1つ10メガバイト程度)を読み込む時に並列処理を使っているのですが、並列処理をした場合と逐次的に読み込む場合とで実行速度が変わりません。逐次処理と並列処理のコードはそれぞれ下のようにしています。
Python3
1#逐次処理 2def get_table(tablename): 3 table_service = TableService(account_name='myaccount', account_key='mykey') 4 tasks = table_service.query_entities(tablename, filter="PartitionKey eq 'tasksSeattle'") 5 return tasks 6 7get_table("table1") 8get_table("table2")
Python3
1#並列処理 2from multiprocessing.dummy import Pool 3 4def get_table(tablename): 5 table_service = TableService(account_name='myaccount', account_key='mykey') 6 tasks = table_service.query_entities(tablename, filter="PartitionKey eq 'tasksSeattle'") 7 return tasks 8 9tables = ['table1', 'table2'] 10with Pool() as p: 11 arr = p.map(get_table, tables)
FUNCTIONS_WORKER_PROCESS_COUNTも10に設定しています。
また、速度が変わらないのはデプロイした時限定で、並列、逐次ともに30秒程度かかってしまいます。しかしローカルの環境でデプロイなどせずに実行した場合はちゃんと2倍ぐらいの速度が出ており、15秒程度で終了することを確認しています。
ログを見てもget_tableは独立に走っていますし、デプロイされた時だけtable1とtable2を順に読み込むのと速度が変わらない理由がよくわかりません。デプロイした場合には通信経路にボトルネックがあるということでしょうか?
考えられる原因、理由を教えてくださると助かります。
あなたの回答
tips
プレビュー