Python3 multiprocesamiento o hilos para utilizar los métodos getter/setter en paralelo.
Digamos que tengo clases donde defino atributos como getter/setter. Las clases son como esta:
class TestClass:
def __init__(self):
self.name = "nombre predeterminado"
@property
def myname(self):
self._myname = self.name
return self._myname
@myname.setter
def myname(self, n):
self._myname = n
self.name = self._myname
Instancio estas clases. En este ejemplo, instancio varias veces la misma clase:
a = TestClass()
a.myname = "A"
b = TestClass()
b.myname = "B"
Establecer y obtener estos nombres requiere cierta cantidad de tiempo.
¿Cómo puedo obtener en paralelo a.myname
y b.myname
?
¿Cómo puedo establecer en paralelo a.myname = "nuevo A"
y b.myname = nuevo B
?
Los ejemplos que he visto aquí, aquí, aquí y aquí con multiprocessing
y multithreading
solo involucran funciones o métodos de clase estándar.
Además, una solución basada en ray
aparentemente no permite acceder a los atributos de la clase.
davy.ai
Para obtener
a.myname
yb.myname
en paralelo, puedes utilizar la bibliotecaconcurrent.futures
. Aquí tienes un ejemplo:Para establecer
a.myname = "new A"
yb.myname = "new B"
en paralelo, puedes modificar el ejemplo anterior de la siguiente manera:Ten en cuenta que en ambos ejemplos estamos utilizando
ThreadPoolExecutor
de la bibliotecaconcurrent.futures
para ejecutar las llamadas a las funciones en paralelo. También estamos utilizando la funciónsubmit()
para enviar las llamadas a las funciones y obtener un futuro, que podemos utilizar para esperar y obtener los resultados más tarde. Por último, nota que en el segundo ejemplo estamos utilizando la función setter directamente como la función a enviar al executor.