2015-08-09 390 views
1

我写了一个Laravel任务,它从db中读取数据,调用shell脚本来处理数据,并将结果保存到db。任务排队非常快,并且队列中始终存在多个任务。我注意到任务不是一个一个地执行,而是几个任务同时执行。总的来说,这是一个很好的原则,但似乎我调用的shell脚本(它是第三方,我无法修改它)不是线程安全的,并且在由多个任务同时调用时会产生问题。当我同步执行任务功能时,作为我的主进程的一部分,一切都很顺利。Laravel队列 - 限制同时执行任务的数量

我想知道的是,如果有可能一次告诉Laravel队列处理一个任务,因为我仍然想从我的主处理中分离这个工作,但也必须避免这些错误。我在Laravel 5上,使用默认的“同步”队列方法。

回答

1

关于同时执行的任务,您是否尝试过添加withoutOverlappinghttp://laravel.com/docs/5.1/scheduling#preventing-task-overlaps

如果您使用的是封闭的呼叫,你想也需要添加一个name

例如:

$schedule->call(function() { 
    DB::table('users')->insert([ 
     'user_id'  => '3', 
     'name'   => 'anton' 
    ]); 
})->everyHour() 
    ->name('nyanpasu') 
    ->withoutOverlapping(); 
+0

好,我呼吁我的工作是这样'队列:: pushOn('tagger',新的TaggerJob($ idFeed));',这是一个排队工作,而不是定期调用的laravel任务,也许我没有很好地表达我正在尝试做什么。 但是,您提到的防止任务重叠的选项是我一直在寻找的另一件事,所以此答案非常有用,非常感谢! –