gpt4 book ai didi

timer - 如何每 15 分钟重复一次自定义函数? ( Julia )

转载 作者:行者123 更新时间:2023-12-04 16:25:44 28 4
gpt4 key购买 nike

我正在尝试编写一个函数,该函数将获取当前登录到 oldschool runescape 的玩家数量,并将当前时间和日期的数量附加到 csv 文件中。这个函数很好用,但是当我尝试使用 Timer 函数多次重复该函数时,它会显示错误。 (我希望它在闲置的笔记本电脑上无限期地每 15 分钟运行一次)。

这是函数:

function countplayers()
res = HTTP.get("https://oldschool.runescape.com")
body = String(res.body);
locatecount = findfirst("There are currently", body);
firstplayercount = body[locatecount[end]+2:locatecount[end]+8]
first = firstplayercount[1:findfirst(',',firstplayercount)-1]
if findfirst(',',firstplayercount) == 3
second = firstplayercount[findfirst(',',firstplayercount)+1:end-1]
else
second = firstplayercount[findfirst(',',firstplayercount)+1:end]
end
finalcount = string(first,second)
currentdate = Dates.now()
concatenated = [finalcount, currentdate]
f = open("test.csv","a")
write(f, finalcount,',')
write(f, string(currentdate), '\n')
close(f)
end

如果我尝试 Timer(countplayers(),10,10) 进行测试,我会收到此错误:

**ERROR: MethodError: no method matching Timer(::Nothing, ::Int64, ::Int64)**

如果将计时器放在函数下方并且在 REPL 中使用计时器命令,则会出现相同的错误。我究竟做错了什么?提前致谢!

最佳答案

扩展 Stefan 的如何从这里开始的建议是一个完整的工作且非常有用的代码:

function dosomething(f, interval) 
stopper = Ref(false)
task = @async while !stopper[]
f()
sleep(interval)
end
return task, stopper
end

现在让我们看看这个 Action :

julia> task, stopper = dosomething(()->println("Hello World"),10)
Hello World
(Task (runnable) @0x000000001675c5d0, Base.RefValue{Bool}(false))

julia> Hello World
julia>

julia> stopper[]=true; # I do not want my background process anymore running


julia> task #after few seconds the status will be done
Task (done) @0x000000001675c5d0

最后,还应该注意的是,在生产系统中,通常最稳健的方法是使用诸如 crontab 之类的系统工具来控制和管理此类重复事件。

关于timer - 如何每 15 分钟重复一次自定义函数? ( Julia ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64771989/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com