繁体   English   中英

Laravel:并行运行Artisan命令

[英]Laravel: Run Artisan Commands in Parallel

我想同时并行运行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();
}

即使这似乎也不起作用。

有人可以告诉我如何并行运行命令?

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

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队列

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM