[英]rufus-scheduler concurrency
我在rails應用程序上運行ruby,需要每隔一分鍾執行一次任務:
scheduler.every '1m' do
.....
end
但有時,這項工作需要超過1分鍾才能完成工作。 發生的事情是,在他完成之前,Rufus開始了一項新工作,在工作結束之前“殺死”了之前的工作。 有沒有辦法讓Rufus在開始下一個工作之前完成工作?
Ps。:還在開發中,所以我正在使用Webrick
您可以為任務添加文件鎖定檢查。 有一個寶石讓它變得非常簡單: https : //github.com/cph/single_file 。
基本上,您可以將任務包裝在SingleFile塊中,第一個任務將鎖定臨時文件。 當它計划再次運行時,如果上一個任務仍然在文件上放置了一個鎖(它沒有運行),那么該任務將不會運行。
include SingleFile
scheduler.every '1m' do
with_file_lock("/tmp/magic_is_happening.lock") do
MagicClass.poof!
end
end
克里斯托弗戴維斯以評論的形式回應非常好。 他指出“間隔”工作。
https://github.com/jmettraux/rufus-scheduler#in-at-every-interval-cron
你可以這樣做
scheduler.interval '1m' do
# ...
end
讓rufus-scheduler在每次運行之間運行你的塊1分鍾。
如果你進一步深入了解文檔,還有另一種技術暴露:
https://github.com/jmettraux/rufus-scheduler#overlap--false
scheduler.every '1m', overlap: false do
# ...
end
調度程序將每分鍾檢查一次。 如果該塊尚未運行,它將運行它,如果它正在運行它將不會觸發,它將在一分鍾后返回並再次檢查。
選擇適合您需求的技術。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.