Увеличьте максимальное количество параллельных загрузок в Python с помощью joblib

#python #parallel-processing #multiprocessing #joblib #cpu-cores

Вопрос:

Я пытаюсь распараллелить несколько загрузок, проблема в том, что количество параллельных загрузок, которые я могу сделать прямо сейчас, самое большее равно 63. У моей машины 8 ядер. Я хотел бы иметь возможность загружать больше, чем это.

Загрузка должна выполняться через api, функция загрузки одного файла:

 def download_combintations (df_to_download):  single_download(year=df_to_download['year'], month=df_to_download['month'])  

Он очень легкий и не требует больших вычислительных мощностей, поэтому я ожидаю, что даже с примерно 200 загрузками он будет в порядке.

В настоящее время для распараллеливания загрузок я использую:

 from joblib import Parallel, delayed  num_cores=len(df_to_download)  if num_donwloadsgt;63:  print(f'Too many requests, try using less requests') elif num_downloads==0:  print(f'All files are already donwloaded') else:  num_cores=num_downloads  print(f'Start launching {num_cores} paralell requests ') Parallel(n_jobs=num_cores)(delayed(download_combination)(combination) for index,combination in df_to_download.iterrows())  

если я перевалю за 63, я получу эту ошибку:

 File "C:UsersAnaconda3envspvlibdev_envlibthreading.py", line 932, in _bootstrap_inner self.run() File "C:UsersAnaconda3envspvlibdev_envlibsite-packagesjoblibexternalslokyprocess_executor.py", line 563, in run result_item, is_broken, bpe = self.wait_result_broken_or_wakeup() File "C:UsersAnaconda3envspvlibdev_envlibsite-packagesjoblibexternalslokyprocess_executor.py", line 617, in wait_result_broken_or_wakeup ready = wait(readers   worker_sentinels) File "C:UsersAnaconda3envspvlibdev_envlibmultiprocessingconnection.py", line 879, in wait ready_handles = _exhaustive_wait(waithandle_to_obj.keys(), timeout) File "C:UsersAnaconda3envspvlibdev_envlibmultiprocessingconnection.py", line 811, in _exhaustive_wait res = _winapi.WaitForMultipleObjects(L, False, timeout) ValueError: need at most 63 handles, got a sequence of length 121  

Есть ли способ увеличить это число до 63?

Есть ли лучший способ распараллелить эти задачи?

Большое спасибо!

пс. Мой второй вопрос, поэтому любые отзывы о стиле и т. Д. Высоко ценятся 🙂