#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?
Есть ли лучший способ распараллелить эти задачи?
Большое спасибо!
пс. Мой второй вопрос, поэтому любые отзывы о стиле и т. Д. Высоко ценятся 🙂