2011-06-15 8 views
28

Estoy escribiendo una aplicación de Python que necesita concurrencia y asincronismo. He recibido algunas recomendaciones para Twisted and Aplery, pero estoy teniendo problemas para determinar cuál es la mejor opción para esta aplicación (tampoco tengo experiencia con ninguna).Twisted or Celery? ¿Cuál es el adecuado para mi aplicación con muchas llamadas SOAP?

La aplicación (que no es una aplicación web) se centra principalmente en realizar llamadas SOAP a varias API de terceros. Para procesar un dato dado, tendré que llamar varias API secuencialmente. Y me gustaría poder tener un grupo de "trabajadores" para cada una de estas API, así puedo hacer más de 1 llamada por vez a cada API. Nada de esto debería ser muy intensivo en la CPU.

Más específicamente, un proceso externo agregará un nuevo "Mensaje" a la base de datos de esta aplicación. Necesitaré un trabajo que busque nuevos mensajes y luego los empuje a través del Proceso. El proceso contendrá 4-5 pasos que deben suceder en orden, pero pueden ocurrir de manera completamente asincrónica. Cada paso tomará el mensaje y actuará de alguna manera, típicamente agregando detalles al mensaje. Cada paso posterior requerirá la salida del paso que lo precede. Para la mayoría de estos Pasos, el trabajo involucrado se centra en llamar a una API de terceros, generalmente con un cliente SOAP, analizar la respuesta y actualizar el mensaje. Algunos casos implicarán la creación de un archivo binario (más difícil de eliminar, si ese es un factor). En última instancia, una vez que se haya completado el último paso, tendré que actualizar un indicador en la base de datos para indicar que todo el proceso está hecho para este mensaje.

Además, dado que cada paso implicará esperar una respuesta de red, me gustaría aumentar el rendimiento general haciendo múltiples solicitudes simultáneas en cada paso.

¿Es Apio o Torcido un marco más apropiado aquí? Si ambos resuelven el problema adecuadamente, ¿hay pros/contras para usar uno frente al otro? ¿Hay algo más que debería considerar en su lugar?

+0

Puede darnos mucha más información? Tal elección va a estar más influenciada por la preferencia personal con la información que usted ha dado que algo más concreto en cuanto a qué es lo que mejor conserva la biblioteca. – wheaties

+0

@Wheaties: sí, absolutamente. Simplemente no estoy seguro de qué información sería útil. ¿Tienes alguna pregunta para guiarme? –

+0

"mantener" -> "cada uno". Oops. En cuanto a las preguntas, no sé. ¿Puede enumerar los aspectos más importantes que está buscando en un marco? Quizás eso nos ayude a guiarlo en su elección. – wheaties

Respuesta

15

¿Es Apio o Torcido un marco más apropiado aquí?

Depende de lo que quiere decir con "generalmente apropiado".

Si ambos resuelven el problema adecuadamente, ¿hay pros/contras para usar uno frente al otro?

No es una lista exhaustiva.

Pros Apio:

  • prefabricado cola de tareas distribuido, con, reintentos, trabajadores remotos que limitan la velocidad
  • El rápido desarrollo
  • curva de aprendizaje comparativamente poco profunda

apio Contras:

  • H eavyweight: múltiples procesos, dependencias externas
  • tiene que ejecutar un paso de mensajes del servicio
  • "procesos" de aplicación tendrá que ajustarse al diseño de apio

Twisted Pros:

  • Ligera: proceso único y no depende de un mensaje que pasa el servicio
  • Desarrollo rápido (para aquellos familiarizados con él)
  • Flexible
  • Probablemente más rápido, no es necesario pasar un mensaje "interno".

Twisted Contras:

  • curva de aprendizaje
  • No es necesariamente tan fácil de añadir capacidad de procesamiento posterior.

estoy familiarizado con ambos, y de lo que ha dicho, si fuera yo me quedaría con trenzados.

Yo diría que lo hará más rápido con Aplery, pero aprenderá más mientras lo hace utilizando Twisted. Si tiene el tiempo y la inclinación para seguir la curva de aprendizaje, le recomiendo que haga esto en Twisted.

+2

Disiento del comentario sobre una "curva de aprendizaje empinada". Twisted es fácil y divertido :-). Además, Twisted te permite generar múltiples procesos con 'spawnProcess' si los necesitas. Esto puede no ser tan fácil, pero al menos es posible; no es posible escribir en una API sin bloqueo más adelante si necesita uno con Celery. Pero de lo contrario, esta es una comparación razonable. – Glyph

+2

@Glyph, se tomó nota debidamente anotado. De corazón estoy de acuerdo con "diversión". Creo que puede ser parcial con respecto a "fácil". Las cosas son fáciles cuando sabes cómo y se necesita mucho "know how" para comenzar con Twisted, por lo que sigo la etiqueta en SO y ayudo cuando puedo. – MattH

+0

Tenga en cuenta que Celery puede tener modelos de concurrencia que no sean procesos (prefork), p. Ej. gevent, eventlet, hilos. –

Cuestiones relacionadas