Pregunta

En el panel de administración, cuando el administrador selecciona una acción que va a cargar los datos de una API y guardarlo en la base de datos. Podría tomar de 2 segundos a 3 minutos, dependiendo de lo que está importando.

¿Cómo puedo hacer en Symfony para crear como un hilo, por lo que el administrador no está a la espera de terminar. Y cuando esté terminado decirle a comprobar el resultado?

¿Son las tareas de la respuesta para este problema?

Gracias!

¿Fue útil?

Solución

No symfony-específico, sino que querrá poner en marcha un proceso de fondo.

No estoy familiarizado con herramientas de Symfony para los scripts de línea de comandos, pero creo que hay cosas que se pueden utilizar.

A continuación, en su controlador, quieres algo más o menos así (asumiendo que usted está en un host unixy):

public function executeYourBackgroundTask(){

    // first, you might want to create some kind of entry in a table to keep track of jobs.
    // Imagine you've got a table to keep track of this stuff
    $job = new Backgroundjob();
    $job->user_id = $this->getUser()->getId();
    $job->starttime = time();
    $job->someArgument = $someArgument; //anything the job script needs for input.
    $job->save();


    $jobId = $job->getId();

    //start a job in the background.
    exec('php /path/to/your/background/script.php ' . $jobId .' &');

    //your view should just tell the user "Your job is being processed, you'll be notified when it is done"
}

Su proceso en segundo plano (en /path/to/your/background/script.php) debería tomar la jobId pasado, agarrar el registro de trabajo, y el uso de cualquiera de las entradas almacenadas para ejecutar el trabajo. Cuando se hace el acaparamiento de los datos y el relleno en la base de datos, debe hacerlo fijar un tiempo final de la tabla (que marca el trabajo lo más completo), y luego hacer lo que quiere hacer para notificar al usuario (enviar un correo electrónico, o insertar algún tipo de fila en una tabla de mensajes, etc)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top