Мне нужно ускорить несколько медленный процесс вычисления Python.Когда я использую свой обычный код, он использует только один из моих процессоров.Мне нужен этот процесс, чтобы использовать все мои процессоры.
Итак, я обнаружил, что использование ProcessPoolExecutor () из модуля concurrent.futures может сделать это для меня.
Вот пример, описывающий это (оригиналздесь: https://towardsdatascience.com/heres-how-you-can-get-a-2-6x-speed-up-on-your-data-pre-processing-with-python-847887e63be5):
Написана функция Python для изменения размера всех изображений в папке до размера 600x600.Итак, базовая функция:
import glob
import os
import cv2
for image_filename in glob.glob("*.jpg"):
img = cv2.imread(image_filename)
img = cv2.resize(img, (600, 600))
Используя ProcessPoolExecutor () и делая его в 6 раз быстрее с 6-ядерным процессором, код выглядит следующим образом:
import glob
import os
import cv2
import concurrent.futures
def load_and_resize(image_filename):
img = cv2.imread(image_filename)
img = cv2.resize(img, (600, 600))
with concurrent.futures.ProcessPoolExecutor() as executor:
image_files = glob.glob("*.jpg")
executor.map(load_and_resize, image_files)
ОК, кажетсядовольно прямо для меня.
Теперь, как применить вышеизложенное для моего случая?
Моя установка такова:
# basic function for performing the calculations
def slow_time_consuming_function(arg1, arg2, arg3, arg4):
# do some slow calculations with arg1, arg2, arg3, arg4
# return some float result
# list of arg1 values (usual length of 100-500)
arg1_list = ['xx', 'xx1', 'xx2', ...]
# function for calculating the whole range of arg1 values
def multiple_arg1_values_calculation_function(arg1_list, arg2, arg3, arg4):
# empty list for the results
list_results = []
# loop for calculating the results
for arg1 in arg1_list:
list_results.append(slow_time_consuming_function(arg1, arg2, arg3, arg4))
return list_results
Моя проблема в том, что я могуне кодируйте все аргументы, не являющиеся аргументами arg1, для основной функции (некоторые из них являются объектами Python, созданными пользователем, и т. д.)1024 *