Увеличить размер пула подключений - PullRequest
0 голосов
/ 04 октября 2018

Мы запускаем следующий код для параллельной загрузки в GCP Buckets.Кажется, мы быстро используем все соединения в пуле на основании предупреждений, которые мы видим.Есть ли способ настроить пул соединений, который использует библиотека?

def upload_string_to_bucket(content: str):
        blob = bucket.blob(cloud_path)
        blob.upload_from_string(content)

with concurrent.futures.ThreadPoolExecutor() as executor:
            executor.map(upload_string_to_bucket, content_list)
WARNING:urllib3.connectionpool:Connection pool is full, discarding connection: www.googleapis.com
WARNING:urllib3.connectionpool:Connection pool is full, discarding connection: www.googleapis.com
WARNING:urllib3.connectionpool:Connection pool is full, discarding connection: www.googleapis.com
WARNING:urllib3.connectionpool:Connection pool is full, discarding connection: www.googleapis.com
WARNING:urllib3.connectionpool:Connection pool is full, discarding connection: www.googleapis.com
WARNING:urllib3.connectionpool:Connection pool is full, discarding connection: www.googleapis.com

1 Ответ

0 голосов
/ 07 августа 2019

У меня похожая проблема с параллельными загрузками.

Эта статья может быть информативной.https://laike9m.com/blog/requests-secret-pool_connections-and-pool_maxsize,89/

Лично я не думаю, что увеличение напряжения соединения является лучшим решением, я предпочитаю разделять «загрузки» на pool_maxsize.

def chunker(it: Iterable, chunk_size: int):
    chunk = []
    for index, item in enumerate(it):
        chunk.append(item)
        if not (index + 1) % chunk_size:
            yield chunk
            chunk = []
    if chunk:
        yield chunk

for chunk in chunker(content_list, 10):
    with concurrent.futures.ThreadPoolExecutor() as executor:
        executor.map(upload_string_to_bucket, chunk)

Конечно, мыможете сразу же начать загрузку после того, как все будет готово, все, как мы хотим.

...