2012-03-12 11 views
8

necesito un marco que permitirá que haga lo siguiente:marco de Python para la ejecución de tareas y dependencias manejo

  • permiten definir dinámicamente las tareas (Voy a leer un archivo de configuración externa y crear las tareas/puestos de trabajo; task = generan un comando externo, por ejemplo)

  • Proporciona una forma de especificar las dependencias de tareas existentes (por ejemplo, la tarea a se llevará a cabo después de la tarea B es terminado)

  • ser capaz de ejecutar tareas en paralelo en múltiples procesos si el orden de ejecución lo permite (es decir sin interdependencias entre tareas)

  • Permite que una tarea dependa de algún evento externo (no sé exactamente cómo describir esto, pero algunas tareas finalizan y producirán resultados después de un tiempo, como un trabajo en segundo plano; para especificar algunas de las tareas que dependen de este evento de fondo de trabajo completado)

  • Deshacer/restaurar compatibilidad: si una de las tareas falla, intente deshacer todo lo que se ha ejecutado antes (no espero que esto sea implementado en cualquier marco, pero supongo que vale la pena preguntar ...)

Así que, obviamente, esto se ve más o menos como un sistema de compilación, pero parece que no puedo encontrar algo que me permita crear tareas dinámicamente, la mayoría de las cosas parece que ya las he definido en el "Makefile".

¿Alguna idea?

+0

Pruebe Apio ...... – Denis

Respuesta

4

que he estado haciendo un poco más de investigación y he topé doit que proporciona la funcionalidad básica que necesito, sin ser excesivo (no digo que el apio no habría resuelto el trabajo, pero esto hace es mejor para mi caso de uso).

0

AFAIK, no existe tal framework en python que haga exactamente lo que usted describe. Entonces, sus opciones incluyen construir algo por su cuenta o modificar algunas de sus necesidades y modelarlas usando una herramienta existente. Que huele a celery.

  • Es posible que tenga una tarea de apio, que lee un archivo de configuración que contiene el código fuente de algunas de las funciones de Python, a continuación, utilizar eval o ast.literal_eval para ejecutarlas.

  • El apio proporciona una forma de definir subtareas (dependencias entre tareas), por lo que si conoce sus dependencias, puede modelarlas en consecuencia.

  • Siempre que conozca el orden de ejecución de sus tareas, puede enrutarlas a tantas máquinas de trabajadores como desee.

  • Puede consultar periódicamente el resultado de este trabajo en segundo plano y luego comenzar las tareas que dependen de él.

  • Deshacer/Retroceder: esto puede ser complicado y depende de lo que desea deshacer; resultados? ¿estado?

+0

Estaba pensando en el apio, pero es un poco exagerado para mis necesidades; No necesito hacer el procesamiento de tareas distribuidas, mis tareas consisten en ejecutar algunos comandos en la máquina local y obtener resultados. Es exactamente como un proceso de compilación en el que compila archivos que tienen dependencias entre ellos. – Unknown

+0

En cuanto a la parte de deshacer, estaba pensando en algo así como clase Tarea: con los métodos do() y deshacer() y trataré con la lógica, el framework solo necesitaría estar al tanto de las operaciones que hizo y llamar a deshacer() en ellos – Unknown

+0

Parece que debe implementar algo por su cuenta. Puede usar el módulo de multiprocesamiento, pero le costará trabajo modelar sus dependencias e implementar reversiones (probablemente almacenando resultados intermedios en un DB, etc.). Insisto en el apio. No es excesivo y facilitará muchos problemas de sincronización/dependencia que pueda tener. – hymloth

1

Otra opción es usar make.

  • Escribir un Makefile manualmente o dejar un script en Python que escribir
  • uso del archivo de salida intermedia significativa etapas
  • Ejecutar hacer, que luego debe llamar a cabo los procesos. Los procesos serían una secuencia de comandos python (compilación) con parámetros que le indican en qué archivos trabajar y qué tarea hacer.
  • ejecución en paralelo es compatible con -j
  • también borra los archivos de salida si las tareas fallan

Esto evita algunos de los problemas pitón paralelización (GIL, serialización). Obviamente solo sencillo en plataformas * nix.

Cuestiones relacionadas