Este grupo de trabajo ha pasado horas investigando la respuesta a tu pregunta, te dejamos la soluciones por esto nuestro deseo es que te resulte de gran apoyo.
Solución:
llamadas a métodos perezosos de objetos
Puede ser cualquier cosa en realidad, así que vamos a desglosarlo:
Función sencilla Déjame llamar a esa función (RPC)
¡Qué suerte! Python tiene una de las mejores implementaciones de llamadas a procedimientos remotos: RPyC.
Simplemente ejecute el servidor (haga doble clic en un archivo, vea el tutorial),
Abra un intérprete y:
import rpyc
conn = rpyc.classic.connect("localhost")
data_obj = conn.modules.lazyme.AwesomeObject("ABCDE")
print(data_obj.calculate(10))
Y una versión perezosa (async):
# wrap the remote function with async(), which turns the invocation asynchronous
acalc = rpyc.async(data_obj.calculate)
res = acalc(10)
print(res.ready, res.value)
Distribución de datos simple
Tiene una unidad de trabajo definida, digamos una manipulación de imagen compleja. Lo que haces es crear más o menos Node
(s), que hace el trabajo real (es decir, toma una imagen, hace la manipulación y devuelve el resultado), alguien que recopila los resultados (un Sink
) y alguien que crea la obra (el Distributor
).
Echa un vistazo a Apio.
Si es una escala muy pequeña, o si solo quiere jugar con ella, consulte la Pool
objeto en el multiprocessing
paquete:
from multiprocessing import Pool
p = Pool(5)
def f(x):
return x*x
print(p.map(f, [1,2,3]))
Y la versión verdaderamente perezosa:
print(p.map_async(f, [1,2,3]))
Lo que devuelve un objeto Result que se puede inspeccionar para obtener resultados.
Distribución de datos complejos
Alguna manipulación de datos compleja de varios niveles que no se limita a disparar y olvidar, o un caso de uso de procesamiento de varios pasos.
En tal caso, debe utilizar un Message Broker como ZeroMQ o RabbitMQ. Le permiten enviar ‘mensajes’ a través de múltiples servidores con gran facilidad.
Lo salvan de los horrores de la tierra TCP, pero son un poco más complejos (algunos, como RabbitMQ, requieren un proceso/servidor separado para el Broker). Sin embargo, le brindan un control mucho más detallado sobre el flujo de datos y lo ayudan a crear una aplicación verdaderamente escalable.
Lazy-cualquier cosa
Si bien no es una distribución de datos per se, es la tendencia más popular en los back-ends de servidores web: usar subprocesos ‘verdes’ (o eventos, o corrutinas) para delegar tareas pesadas de IO a un subproceso dedicado, mientras el código de la aplicación está ocupado maximizando- fuera de la CPU.
Me gusta mucho Eventlet, y gevent es otra opción.
Pruebe Gearman http://gearman.org/
Gearman proporciona un marco de aplicación genérico para subcontratar el trabajo a otras máquinas o procesos que se adaptan mejor para realizar el trabajo. Le permite trabajar en paralelo, equilibrar la carga del procesamiento y llamar a funciones entre idiomas. Se puede utilizar en una variedad de aplicaciones, desde sitios web de alta disponibilidad hasta el transporte de eventos de replicación de bases de datos. En otras palabras, es el sistema nervioso el que determina cómo se comunica el procesamiento distribuido.
Sección de Reseñas y Valoraciones
Puedes estimular nuestra investigación exponiendo un comentario o valorándolo te damos las gracias.