2

ユーザーが特定のページをリクエストしたり、ボタンをクリックしたりすると、スクリプトを実行する Laravel 5.1 を使用して記述された Web アプリケーションがあります。これにより、バックグラウンドでスクリプトがアクティブになります。ジョブとキューを使用してこれを試しました。

ここに私のコードチャンクがあります: myjob.php

class myjob extends Job implements SelfHandling, ShouldQueue {
use InteractsWithQueue, SerializesModels;

/**
 * Create a new job instance.
 *
 * @return void
 */
public function __construct()
{
    //
}

/**
 * Execute the job.
 *
 * @return void
 */
public function handle()
{
    //
    set_time_limit(0);
    $this->writeJobLogs('Error', 'Start Execution');
    //Job Processing Code
    $this->writeJobLogs('Error', 'End Execution');
}
}

Controller.php

class ManageController extends Controller {
    public function testJob(){
        $this->dispatch(new myjob());
    }
}

ジョブ処理コードの実行には少なくとも 10 分かかると予想されます。コードを実行すると、エラーがスローされた後、以下のようになります。

[Symfony\Component\Process\Exception\ProcessTimedOutException] プロセス ""C:\wamp\bin\php\php5.5.12\php.exe" "artisan" queue:work --queue="default" --delay=0 --memory=128 --sleep=3 --tries=0 --env="local"" がタイムアウトの 60 秒を超えました。

& ジョブ処理コードは、ユーザーの要求に応じて同時に複数回実行されることが予想されます。したがって、キューが正常に機能するのか、それとも他に良い選択肢があるのか​​ については疑問があります。もしそうなら、提案してください。

4

2 に答える 2

1

Laravel Queue はプロセスをバックグラウンドで実行するのではなく、後で実行を延期する機能を提供します。php.ini で指定された最大実行時間を超えているため、スクリプトがタイムアウトしています。

于 2016-03-15T13:23:24.903 に答える