51058


Python3.6でconcurrent.futuresを使って並列でhttp
requestを投げているのですが、普通にfor文で1つずつリクエストを出しているときとあまり速度が変わらないようなのです。どうすれば並列に実行できますか?

urlopenはCPUバウンドな処理ではないかと思い、ProcessPoolExecutorにもしてみましたが、あまり変化は感じられませんでした。

[code]

    import urllib.request as ur
    import concurrent.futures
    
    def concurrent_exe(): #concurrent.futureを使用
        thread_pool_exe = concurrent.futures.ProcessPoolExecutor()
        for v in range(10000):
            future = thread_pool_exe.submit(access_example)
            print(future.result(), v)
    
    def access_example():
        return ur.urlopen("http://example.com").read().decode("utf-8")[10:15]
    
    def seq_exe(): # 普通のfor
        for v in range(10000):
            print(v, access_example())
    
[/code]


CC BY-SA 4.0
2018-12-09T05:35:46.577
51056
2018-12-09T13:22:39.627
5246
question
python python3
Python3.6でconcurrent.futuresで並列でhttp requestを出す


複数のsubmitをまとめて行い、そのあとでそれぞれのresultを見るようにしてください。

submitするごとにresultを呼び出すのでは、一つ実行してはその完了を待ち、それから次の実行をスケジュールするということになります。


CC BY-SA 4.0
2018-12-09T06:18:37.630
51058
2018-12-09T06:18:37.630
9464
51056
answer