Python: эффективный обходной путь для многопроцессорной обработки функции, являющейся членом данных класса, внутри этого класса
Я знаю оразличный обсуждение изограничения многопроцессорного модуля при работе с функциями, являющимися членами данных класса (из-за проблем с перебором).
Но есть ли другой модуль или какой-нибудь обходной путь в многопроцессорной обработке, который позволяет что-то вроде следующего (особенно без принудительного применения определения функции параллельно, чтобы существовать вне класса)?
class MyClass():
def __init__(self):
self.my_args = [1,2,3,4]
self.output = {}
def my_single_function(self, arg):
return arg**2
def my_parallelized_function(self):
# Use map or map_async to map my_single_function onto the
# list of self.my_args, and append the return values into
# self.output, using each arg in my_args as the key.
# The result should make self.output become
# {1:1, 2:4, 3:9, 4:16}
foo = MyClass()
foo.my_parallelized_function()
print foo.output
Примечание: я могу легко сделать это, перемещаяmy_single_function
вне класса и прохождения что-то вродеfoo.my_args
кmap
или жеmap_async
команды. Но это толкает параллельное выполнение функции за пределыMyClass
.
Для моего приложения (распараллеливание большого запроса данных, который извлекает, объединяет и очищает ежемесячные сечения данных, а затем добавляет их в длинный временной ряд таких сечений), очень важно иметь эту функциональностьinside the class поскольку разные пользователи моей программы будут создавать разные экземпляры класса с разными временными интервалами, разными приращениями времени, разными подмножествами данных для сбора и т. д., все это должно быть связано с этим экземпляром.
Таким образом, я хочу, чтобы работа по распараллеливанию также выполнялась экземпляром, так как он владеет всеми данными, относящимися к распараллеленному запросу, и было бы глупо пытаться написать какую-то хакерскую функцию-обертку, которая связывается с некоторыми аргументами и живет вне класс (Тем более, что такая функция не является общей. Для нее потребуются все виды специфики внутри класса.)