[英]How to limit number of simultaneous sessions per user account in Laravel 4
[英]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.