2015-02-23 84 views
1

我想在確切秒內執行一行,比如14:02:08.000000。這裏是我用來這樣做的代碼:python在%H的特定時間運行一行:%M:%S.000000

now = datetime.now() 
while now.strftime("%f")!= "000000": 
    now = datetime.now() 
run_the_code 

此方法在我的筆記本電腦上正常工作。然而,當我在我的覆盆子Pi上使用這個代碼時,它的CPU速度慢得多,需要花費相當長的時間才能'捕捉'%f == 000000的情況。

我猜測調度方法會更快,但我不知道如何讓它運行在%f == 000000的確切時間。

有沒有其他方法可以在我的慢速RPi上解決它?謝謝!

+0

運行while循環無延遲會用盡可能多的CPU,因爲它可以得到的。我不確定樹莓派是否擁有它,但是您可能只想使用cron作業來運行python腳本。 – EvergreenTree 2015-02-23 22:26:05

+3

如果您的目標是在某個任意時間執行某些命令,您可能想了解一些關於[cron](http://www.raspberrypi.org/documentation/linux/usage/cron.md)的信息。 – aruisdante 2015-02-23 22:26:07

+1

如果你試圖在模塊本身中安排事件,你也可以看看['sched'](https://docs.python.org/2/library/sched.html),儘管它不是非常精確。它也期望在模塊中具有基本上所有的運行時控制執行。另請參閱:http://stackoverflow.com/questions/23170318/real-time-interrupts-in-python – aruisdante 2015-02-23 22:30:26

回答

0

那麼,有沒有辦法安排在精確的第二事件,但也許你會想在或下一秒鐘後小幅運行,即:

from datetime import timedelta, datetime 

next_second = datetime.now() + timedelta(microseconds=999999) 
next_second = next_second.replace(microsecond=0) 
while datetime.now() < next_second: 
    pass 

代碼會將當前時間到接下來的整整一秒:

>>> now = datetime.now() 
>>> now 
datetime.datetime(2015, 2, 24, 0, 30, 9, 885974) 
>>> next_second = now + timedelta(microseconds=999999) 
>>> next_second 
datetime.datetime(2015, 2, 24, 0, 30, 10, 885973) 
>>> next_second.replace(microsecond=0) 
datetime.datetime(2015, 2, 24, 0, 30, 10) 
相關問題