2015-08-09 77 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任務,也許我沒有很好地表達我正在嘗試做什麼。 但是,您提到的防止任務重疊的選項是我一直在尋找的另一件事,所以此答案非常有用,非常感謝! –