2017-10-13 101 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),只有阻塞調度程序的實現,但應該可以添加多線程。

相關問題