簡體   English   中英

Laravel隊列-限制同時執行的任務數

[英]Laravel queues - limit number of simultaneous tasks

我編寫了一個Laravel任務,該任務從db讀取數據,調用Shell腳本來處理數據,然后將結果保存到db。 任務排入隊列非常快,並且隊列中始終存在多個任務。 我注意到任務不是一個接一個地執行,而是同時執行幾個任務。 一般而言,這是一個很好的原則,但是似乎我調用的shell腳本(是第三方的,我無法修改)不是線程安全的,並且在由多個任務同時調用時會產生問題。 當我同步執行任務功能時,作為我的主要流程的一部分,一切都會順利進行。

我想知道的是,是否有可能一次告訴Laravel隊列處理一個任務,因為我仍然想將此工作與我的主要處理分開,而且還必須避免這些錯誤。 我在Laravel 5上,使用默認的“同步”隊列方法。

關於同時執行的任務,您是否嘗試過添加而沒有withoutOverlapping http://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();

我找不到任何適合我需要的答案,並且這個問題出現在“ laravel限制一項工作”的前10個搜索結果中,因此我決定我將分享我對這個問題的解決方案。 也許會幫助別人。

我的API要求有重疊的工作,導致外部服務器上出現500錯誤。 為了克服這個問題,我想將執行限制為一項工作。

對我來說,最簡單的解決方案是為一個特定的隊列 (在我的情況下為“ api”) 創建另一個Supervisor配置文件 ,我使用numprocs=1命令將其在配置中限制為一個進程。

此后,我可以將外部服務器的所有API作業分派到“ api”隊列中,並且它們永遠不會重疊。

我不知道這是否是最好的方法,但是它以最小的努力解決了我的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM