2010-06-21 20 views
5

quiero ejecutar un programa continuamente en appengine.This programa rastreará automáticamente un sitio web continuamente y almacenará los datos en su base de datos. ¿Es posible que el programa continúe haciéndolo en appengine? matar el proceso?rastreador en appengine

Nota: La página web que se va a rastrear no se almacena en appengine

+0

posible duplicado de [tareas de antecedentes sobre appengine] (http://stackoverflow.com/questions/149307/background-tasks-on-appengine) –

Respuesta

8

quiero ejecutar un programa contínuamente en appengine.

Can not.

Lo más cerca que se puede conseguir es fondo duración scheduled tasks que duran no more than 30 seconds:

En particular, esto significa que el tiempo de vida de la ejecución de una única tarea es limitado a 30 segundos. Si la ejecución de su tarea se acerca al límite de 30 segundos, App Engine generará una excepción que podrá capturar y luego rápidamente guardará su trabajo o proceso de registro.

+2

1 a esto. Puede programar tareas para que se ejecuten periódicamente en un sitio, lo que debería ser suficiente, pero no puede tener el rastreo continuo de una página. Si la página admite PubSubHubBub (http://code.google.com/p/pubsubhubbub/) o alguna otra tecnología de inserción, puede hacer que su aplicación se suscriba a las actualizaciones y rastree cuando la página realmente cambie. –

+0

Para rastrear, yo diría que una cola de tareas es mejor que un único daemon. Se trata de un paralelismo para ti, y el modelo de tarea se adapta trepando extremadamente bien. –

+0

@Ben ¿Qué pasa con los backends? – Michael

0

No puede ejecutar literalmente un proceso continuo durante más de 30 segundos. Sin embargo, puede usar la cola de tareas para que un proceso llame a otro en una cadena continua. Alternativamente, puede programar trabajos para ejecutar con el servicio de Cron.

0

Utilice un trabajo cron para comprobar periódicamente las páginas que no se han extraído en el pasado n horas/días/lo que sea, y coloque las tareas de fragmentación de un subconjunto de estas páginas en una cola de tareas. De esta forma, sus procesos no son asesinados por tomar demasiado tiempo, y no golpea el servidor que está arrastrando con excesivas ráfagas de tráfico.

He hecho esto y funciona bastante bien. Tenga cuidado con los tiempos de espera de tareas; si las cosas tardan demasiado, divídelas en múltiples fases y asegúrate de usar memcached generosamente.

2

Un amigo mío sugirió siguiente

  • Crear una task queue
  • Iniciar la cola al pasar algunos datos.
  • Utilice un controlador de excepción y maneje DeadlineExceededException.
  • En su controlador, cree una nueva cola para el mismo propósito.

Puede ejecutar su trabajo infinitamente. Solo necesita considerar el tiempo de CPU y el almacenamiento utilizados.

0

Pruebe esto:

en appengine ejecuta cualquier programa. Se conecta desde el navegador, haga clic para iniciar la URL durante ajax. Servidor de llamadas Ajax, descargue algunos datos de Internet y devuelva su (su navegador) siguiente url. Esta no es una solicitud, cada url es una solicitud diferente. Tu mástil solo resuelve en JS cómo ajax está llamando url un ciclo.

0

Puede utilizar el servicio GAE durado llamado back-end.Verifique esto http://code.google.com/appengine/docs/java/backends/ Los backends son instancias especiales de App Engine que no tienen plazos de solicitud, memoria más alta y límites de CPU, y estado persistente en todas las solicitudes. App Engine los inicia automáticamente y puede ejecutarlos continuamente durante largos períodos. Cada instancia de back-end tiene una URL única para usar en las solicitudes, y puede cargar las solicitudes de saldo en varias instancias.

1

Es posible que desee considerar la introducción de Backends en la versión más nueva de GAE.

Estos procesos continuos dirigidos

1

es posible , ya he construir una solución en AppEngine - wowprice

uso compartido todos los detalles aquí harán que mi respuesta larga,

Problema - Supongamos que quiero rastrear walmart.com, como sé que no puedo rastrear de una sola vez (millones de productos)

Solución - He diseñado mi araña para dividir la tarea en tareas más pequeñas.

  • Paso 1: trabajo de entrada para walmart.com, el programador de tareas creará una tarea.
  • Paso 2: Mi araña escogerá el trabajo y su aviso de que su página de índice, ahora mi araña creará más trabajos como página de inicio como página de categorías, ahora ingresa 20 tareas más
  • Paso 3: ahora spider make more trabajos más pequeños para subcategorías, y continuará hasta que obtenga la página de la lista de productos y cree una tarea para ella.
  • Paso 4: para las páginas de la lista de productos, es obtener el producto y realizar una llamada a las tiendas de los datos del producto y en el caso de la página siguiente, hará una tarea para rastrearlos.

Ventajas - Nos puede rastrear sin romper las reglas 30 segundos, y la velocidad de rastreo voluntad depende máquina de back-end, proporcionará paralelo de arrastre por un solo objetivo.