簡體   English   中英

rufus-scheduler並發

[英]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.

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