說我有一個鏈接聚合應用程序,用戶在鏈接上投票。我使用每次鏈接投票時運行的算法生成的熱度分數對鏈接進行排序。然而,在每次投票中運行它似乎過度。我如何限制它,使其運行時間不超過5分鐘。如何執行一段代碼不超過每X分鐘?
回答
一)使用cron作業
B)時保留的程序上次運行的時間戳的軌跡,並且在當前的時間戳 - 時間戳已存儲> 5分鐘,然後運行程序和更新的時間戳。
var yourVoteStuff = function() {
...
setTimeout(yourVoteStuff, 5 * 60 * 1000);
};
yourVoteStuff();
在問爲什麼不使用setTimeinterval之前,請閱讀下面的註釋。
爲什麼「爲什麼setTimeinterval」,而不是「爲什麼cron工作?」?我是那麼錯?
爲什麼不使用'setinterval'? – 2013-05-08 21:05:42
如果你的VoteStuff裏面有東西超過5分鐘,你會遇到麻煩,因爲setTimeinterval會再次調用它,請觀看http://www.youtube.com/watch?feature=player_detailpage&v=i_qE1iAmjFg#t=462s,所以,這個確保這將在最後完成的東西后5分鐘運行。 – coma 2013-05-08 21:08:02
我明白了。很公平! – 2013-05-08 21:36:26
- 首先你建立一個接收器,接收你所有的鏈接提交。
- 其次,接收推()ES的各個環節(已接收),以 隊列(我強烈建議redis)
- 而且你必須與你的願望的時間間隔循環的聚合。在這個循環中,每個排隊的鏈接應該輪詢()並繼續到您的業務邏輯。
我已將此解決方案用於生產級別,我可以告訴您,縮放比例也很好,因爲它也可以執行。
使用示例;
var MIN = 5; // don't run aggregation for short queue, saves resources
var THROTTLE = 10; // aggregation/sec
var queue = [];
var bucket = [];
var interval = 1000; // 1sec
flow.on("submission", function(link) {
queue.push(link);
});
___aggregationLoop(interval);
function ___aggregationLoop(interval) {
setTimeout(function() {
bucket = [];
if(queue.length<=MIN) {
___aggregationLoop(100); // intensive
return;
}
for(var i=0; i<THROTTLE; ++i) {
(function(index) {
bucket.push(this);
}).call(queue.pop(), i);
}
___aggregationLoop(interval);
}, interval);
}
乾杯!
看媽媽! setTimeout!,感謝兄弟。 – coma 2013-05-08 22:11:32
讓我們做一個setTimeout運動「setTimeout FTW!」呵呵.. – 2013-05-09 08:20:27
- 1. 每x分鐘執行一段代碼
- 2. 每x分鐘運行一次代碼
- 3. 如何讓代碼每15分鐘連續執行一次?
- 4. 每3分鐘執行一次代碼的Jquery代碼
- 5. Java代碼應該每5秒鐘執行一分鐘
- 6. SQL Server Azure - 每x分鐘執行一次存儲過程
- 7. 如何每x分鐘執行一次http呼叫
- 8. 鉻擴展,每x分鐘執行
- 9. 執行代碼每x秒
- 10. 如何優化此查詢,執行時間超過一分鐘
- 11. 如何在Python中知道每分鐘執行一行代碼的次數?
- 12. 如何讓代碼每30分鐘運行一次?
- 13. 在Java中,如何每X秒執行一次代碼?
- 14. 在Swift中每x分鐘執行一次
- 15. PHP每X分鐘執行一次動作
- 16. 如何每15分鐘運行一次JSP代碼而不運行它
- 17. 執行功能的背景每隔X分鐘不工作
- 18. 執行一個cronjob每分鐘2次
- 19. PHP:我想執行的代碼,每1分鐘
- 20. 每分鐘在控制檯應用程序中執行代碼
- 21. 如何跳過執行一行代碼?
- 22. 如何創建計時器? (每X秒/分鐘/小時執行一次)
- 23. 每分鐘運行超過一次的cron
- 24. 如何每x分鐘運行一次AsyncTask
- 25. 查看執行時間非常長(超過一分鐘)
- 26. 如何執行某些類方法每100ms不超過一次?
- 27. 如何在每隔1分鐘執行C++中的特定代碼
- 28. 當執行硒等待超過10分鐘時Specrun超時測試執行
- 29. 如何每分鐘運行一次AsyncTask?
- 30. xcode AVAudioRecorder如何每30分鐘執行一次背景記錄
爲什麼要使用cron?讓PHP等其他語言的cron。 node.js不間斷地運行你的進程,所以你可以使用setTimeout。 – coma 2013-05-08 20:50:19
@coma如果你想要執行多次代碼,你可能想使用'setInterval'而不是'setTimeout' ... – War10ck 2013-05-08 20:53:06
不,請觀看http://www.youtube.com/watch?feature= player_detailpage&v = i_qE1iAmjFg#t = 462s – coma 2013-05-08 21:02:08