Laravel:并行运行Artisan命令

时间:2016-09-09 18:24:38

标签: php laravel

我想同时并行运行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 个答案:

答案 0 :(得分:2)

您可能希望使用作业和队列。

do.call

然后编辑您的作业类以处理您的csv文件导入。然后从这样的控制器发送此作业:

splat <- function(f,v) {
    do.call(f, as.list(v))
}

splat(func2, c(10,121))

确保您的工作进程正在运行。你可以这样开始:

php artisan make:job ImportCsv

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