2016-03-01 301 views
0

我需要編寫一段Python代碼以便每小時一分鐘重複一次交易算法。我嘗試的所有解決方案(例如Sleep())都會計算機器時間,這不是我想要的。Python每小時第5分鐘重複一次算法

我需要保持呼叫之間的狀態......我希望算法每隔5分鐘運行一次(例如14:00; 14:05; 14:10; 14:15 ......) 。該算法(重新獲取數據並清理數據)本身需要大約12秒才能執行。如果計算機被暫停,我將跳過迭代。

+3

爲什麼不使用cron? –

+0

相關:[在Python中每x秒重複執行一次函數的最佳方式是什麼?](http://stackoverflow.com/a/25251804/4279) – jfs

回答

0

編輯

根據您的評論:「我希望算法的方式運行每5分鐘(例如14:00; 14:05; 14:10; 14:15 .... ..)。」

使用datetime和無限循環:

import time 
import datetime 

while True: 
    if datetime.datetime.now().minute % 5 == 0: 
     #do algorithm 
    time.sleep(60) 
+0

此解決方案正在工作,但仍存在問題,該算法將在第五分鐘的整個持續時間內循環,有沒有辦法只執行一次? –

+0

另一件事,有沒有辦法停止循環,而不關閉consolle? –

+0

爲了避免您的第一個問題,我在每種情況下都添加了'time.sleep(60)' – mvelay

1

,如果你在Linux環境中工作,你可以使用一個cron作業。通過

crontab -e 

打開的cron選項卡下面將開始一個python腳本cronjob.py一個小時的每第5分鐘:

5 * * * * python /path/to/script/cronjob.py 

編輯:既然指定了「OP希望算法的方式運行,每5分鐘「:

*/5 * * * * python /path/to/script/cronjob.py 
+0

這可以工作,但我有一些變量,我需要存儲在代碼中,並且如果使用此解決方案,我想會返回到啓動狀態 –

+0

@DiegoDiTommaso:將此信息(即您需要「保持呼叫之間的狀態」 )納入你的問題。提及如果迭代需要超過5分鐘(你想跳過下一個迭代還是同時運行兩個迭代?),你希望發生什麼?如果計算機時間跳轉(向前/向後),您希望發生什麼,如果計算機被暫停 - 您是否要跳過相應的迭代? – jfs

+0

它不是「每五分鐘」而是「每五分鐘一小時」。 – mvelay

0
import time 

while True: 
    time.sleep(300 - time.time() % 300) 
    crunch_numbers() 

crunch_numbers()上調用5分鐘邊界由定義time.time()時鐘。