2017-10-13 90 views
4

我有一块想要转换为Julia的Python代码。我使用的是Python代码schedule包。 Julia的等价物是什么,我查看了Julia文档中的“任务和并行计算”部分,但我找不到类似的东西。在Python中的代码是:什么是Julia等同于Python的日程安排包?

def main(): 
    schedule.every(0.25).seconds.do(read_modbus, 1, 1000, 100, 1) 
    while True: 
     schedule.run_pending() 
     time.sleep(0.05) 
+1

确切的用例是什么?也就是说,有一个原因,你不能只是“真实的;的println( “你好\ n”);睡眠(0.25);结束' –

+1

这不会有什么帮助,我不知道调用read_modbus函数需要多少时间,但我想每秒运行4次。 –

+0

如果您尝试'def read_modbus(* a):print(datetime.datetime.now()); time.sleep(0.19)',您会看到该函数每秒只能调用大约2次,尽管有空间可用它4次。 (如果将'schedule.every(0.25)'更改为'schedule.every(0.001)',它将被调用大约4次!)。我认为这是因为下一次运行计划[**工作完成后**](https://github.com/dbader/schedule/blob/master/schedule/__init__.py#L386) – Liso

回答

5

请问Timer工作?这种形式TimerTask中调用您的函数,因此您需要偶尔从您的主循环中产生控制权以允许计时器任务运行。你可以通过调用yieldsleepwait,或者做IO来产出,这里我显示等待定时器。

tstart = time() 
ncalls = 0 
read_modbus() = (global ncalls+=1;@show (time()-tstart)/ncalls,ncalls) 
t=Timer((timer)->read_modbus(),0,0.25) 

while true 
    wait(t) # wait for timer to go off 
    println("mainloop $ncalls") 
end 
+0

是的! :)这个'read_modbus()=(全局ncalls,tstart; println((time() - tstart)/(ncalls!= 0?ncalls:1),“”,ncalls); sleep(0.24); ncalls + = 1) ; tstart = time(); ncalls = 0; t = Timer((定时器) - > read_modbus(),0,0.25);'正在按照我的预期工作。但我没想到这个'read_modbus()=(全局ncalls,tstart; println((time() - tstart)/(ncalls!= 0?ncalls:1),“”,ncalls); sleep(0.5) ; ncalls + = 1); tstart = time(); ncalls = 0; t = Timer((timer) - > read_modbus(),0,0.25);'会收敛到0.75s ... – Liso

+0

谢谢, –

+0

我还在寻找一个Julia调度程序...(在我的情况下替换Python APScheduler)请参阅https://discourse.julialang.org/t/julia-cron-like-event-scheduler/6899/2 – scls

1

我注意到,对于Julia调度库丢失,所以我写了一个https://github.com/scls19fr/ExtensibleScheduler.jl

下面是一个使用阻塞调度一个基本的例子。

using ExtensibleScheduler 

function read_modbus(p1, p2, p3, p4) 
    println("Read_modbus with $p1 $p2 $p3 $p4") 
end 

sched = BlockingScheduler() 

add(sched, Action(read_modbus, 1, 1000, 100, 1), Trigger(Dates.Millisecond(250))) 

run(sched) 

虽然,这是一项正在进行的工作,但可以提供贡献者。

目前(2017-12),只有阻塞调度程序的实现,但应该可以添加多线程。

相关问题