Saltar al contenido

Programación distribuida en Python

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *