문제

관리자 패널에서 관리자가 작업을 선택하면 API에서 데이터를로드하여 DB에 저장합니다. 그가 가져 오는 것에 따라 2 초에서 3 분이 걸릴 수 있습니다.

Symfony에서 스레드처럼 만들기 위해 어떻게해야합니까? 그리고 그것이 끝났을 때 그에게 결과를 확인하라고 말합니까?

작업 이이 문제에 대한 답변입니까?

감사해요!

도움이 되었습니까?

해결책

Symfony 특정은 아니지만 배경 프로세스를 시작하고 싶을 것입니다.

나는 Symfony의 명령 줄 스크립트를위한 툴링에 익숙하지 않지만 사용할 수있는 것들이 있다고 생각합니다.

그런 다음 컨트롤러에서 대략 같은 것을 원합니다 (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"
}

배경 프로세스 (/path/to/your/background/script.php)는 통과 된 Jobid를 취하고 작업 기록을 잡고 저장된 입력을 사용하여 작업을 실행해야합니다. 데이터를 잡고 데이터베이스에 채워 넣을 때, 작업을 완료 한 것으로 표시 한 다음 사용자에게 알리기 위해 원하는 모든 것을 수행해야합니다 (이메일 보내거나 일부 삽입 메시지 테이블 등에 행한 행)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top