date - 在 Julia 中是否有一种有效的方法可以将程序的执行暂停到第二天?

假设我正在运行一个程序,每天我想在 X 次迭代后暂停该程序,直到下一个日历日开始。程序每天必须暂停的时间会有所不同,因为我不知道 X 次迭代何时会在给定的一天完成。

问题有没有一种简单的方法可以暂停程序,使其在美国东部时间第二天开始时重新启动?

我想到了使用 sleep() 函数。问题是程序每天必须暂停的时间间隔不同,所以我不能输入绝对时间值。所以我认为从概念上讲,这样的事情可能会奏效。

while true 
    # run function until X loops
    # sleep(Minute(tomorrow's date - now())

但我不确定如何从 Julia 那里获得明天约会的开始时间,或者这是否是最有效的方法。

如有任何想法,我们将不胜感激。谢谢!

最佳答案

您通常会像@pfitzseb 所说的那样使用cron。 然而,最简单的 Julia 代码可能是:

function once_a_time(f, interval)
    repeat = Ref(true) 
    task = @async begin 
        sleep(5) # some calculated time to start
        while repeat[]
            @async f()
            sleep(interval)
        end
    end
    return (;task, repeat)
end

此函数将以给定的固定间隔执行 f,而不管之前的假设如何。此代码使用绿色线程,因此它假定 f 执行时间小于 interval 的值(或者 f 主要是 I/O) . 该函数返回任务句柄以及对 repeat 变量的引用,因此您可以从外部代码停止调度程序。

现在让我们测试一下:

julia> task, rep = once_a_time(()->println("hello ",round(Int,time()) % 1000), 5)
(task = Task (runnable) @0x000000001b69b850, repeat = Base.RefValue{Bool}(true))

julia> hello 347
hello 352
hello 357
hello 362
julia> rep[]=false
false

https://stackoverflow.com/questions/67977718/

相关文章:

.net-core - 指定的 deps.json[] 不存在 - Blazor WebAssemb

python - 如何使 spaCy 匹配不区分大小写

java - 刀柄不同步

javascript - 如何在 Vue 3 模板中使用导入函数?

vue.js - vue.config.js 中的 Vue devServer.proxy 不工作

javascript - 如何使用 Manifest v3 获取当前选项卡 URL?

javascript - 使用 showDirectoryPicker() 访问子目录文件内容

SQL - Like and greater than 函数

python - 在python中获取每个月的最后一个星期五

javascript - 如何使用 React-hook-form 和 yup 验证 React-q