Laravel:并行运行Artisan命令

3

我希望能够同时并行地运行artisan命令,以下是我的代码:

$files = glob($this->fixedDir . '*.csv');

foreach ($files as $csvFile) {
   Artisan::call('mycommand:import', ['--file' =>$csvFile]);
}

我的建议是提供文件选项,然后每个命令都处理它。但是上面的代码按顺序而不是并行运行每个命令。我也尝试过这样:

$schedule = new Schedule();
$files = glob($this->fixedDir . '*.csv');

foreach ($files as $csvFile) {
   $schedule->command('mycommand:import', ['--file' =>$csvFile])
   ->everyMinute()
   ->withoutOverlapping();
}

即使那样似乎也不起作用。

有人能告诉我如何并行运行命令吗?

1个回答

2

您可能想要使用工作和队列来实现此目的。

php artisan make:job ImportCsv

然后编辑您的工作类以处理CSV文件导入。然后从控制器分派此作业,如下所示:
<?php

namespace App\Http\Controllers;

use App\Jobs\ImportCsv;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class FileController extends Controller
{
/**
 * Store a new file.
 *
 * @param  Request  $request
 * @return Response
 */
public function store(Request $request)
{
    // Create file...

    dispatch(new ImportCsv($file));
}
}

确保您的工作进程正在运行。您可以像这样启动它:

php artisan queue:work

您可以从文档中了解详细信息;Laravel队列

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接