Параллельные фьючерсы: лучшие настройки для нескольких асинхронных запросов?

Я хочу оптимизировать скрипт, чтобы сделать как можно больше сетевых запросов. Я вижу max_workers может быть ограничено количеством ядер на машине. Означает ли это, что если этот скрипт выполняется на компьютере EC2, например, t2.2xlarge с 8 виртуальными ЦП, тогда сценарий будет эффективно ограничен 8, например WORKERS = 8?

Если да, то есть ли лучший способ сделать более 8 запросов одновременно?

Пример:

WORKERS = 16 # should this be limited to 8?

def make_req_futures(url_list):
    # We can use a with statement to ensure threads are cleaned up promptly
    with concurrent.futures.ThreadPoolExecutor(max_workers=WORKERS) as executor:
        # Start the load operations and mark each future with its URL
        future_to_url = {executor.submit(load_url, url, 60): url for url in url_list}
        for future in concurrent.futures.as_completed(future_to_url):
            url = future_to_url[future]

            try:
                print("getting: ", url)
                data = future.result()
            except Exception as exc:
                failed_urls.append([url, exc])
                print('%r generated an exception: %s' % (url, exc))
            else:
                success_urls.append(url)
                print('"%s" fetched in %ss' % (url,(time.time() - start)))
    print("Elapsed Time: %ss" % (time.time() - start))

0 ответов

Другие вопросы по тегам