実行する必要があるのは、一定の時間間隔ごとに関数を実行する必要があるからです。例えば関数の実行時間を数えずに一定時間ごとに関数を実行する
初めの時間は夜12時00分00秒で、間隔は5秒であるならば、私は、この関数の実行時間があることが必要です。
00:00:00
00:00:05
00:00:10
00:00:15
...
23:59:55
あなたは私のポイントは見ることができるように私はschedule 0.3.2で他のソリューションを参照してください.Futhermoreシステム
のクロックは How to execute a function asynchronously every 60 seconds in Python?とWhat is the best way to repeatedly execute a function every x seconds in Python?などのstackoverflowの関係この質問をして、多くの質問が存在しています。私は自分のコードを実行したときに
import schedule
import time
def job():
print("I'm working...")
print 'execute f time: ', time.ctime(time.time())
print 'execute f time: ', time.time()
schedule.every().minutes.do(job)
while 1:
schedule.run_pending()
time.sleep(1)
この場合、私のコードの出力は次のとおりです:
I'm working...
execute f time: Wed Jul 13 04:32:00 2016
execute f time: 1468398720.88
I'm working...
execute f time: Wed Jul 13 04:33:00 2016
execute f time: 1468398780.94
I'm working...
execute f time: Wed Jul 13 04:34:01 2016
execute f time: 1468398841.0
あなたはこのコードがある見ることができるように
私の問題は、このコードの例のためということです毎分実行されますが、間隔が1分から1分に1秒に変わります。このエラーは私にとっては重要なことです。おそらく関数の印刷時間の原因になります。
import threading
import time
def f():
# call f() again in 10 seconds
threading.Timer(10, f).start()
# do something here ...
print 'execute f time: ', time.time()
time.sleep(5)
# start calling f now and every 10 sec thereafter
print 'init time: ', time.time()
f()
出力のフラグメントが示さ:私は同じエラーを持っている
に機能プリントの時間の累積和によって引き起こさ秒なしタイマーと私のソリューションをこの場合、すべての分を実行し続けること必要瞬時の累積誤差が5より大きい([0、5、10、16、21、26、...])ということになります。これは私には間違っています。関数:
init time: 1468407868.6
execute f time: 1468407868.6
execute f time: 1468407878.6
execute f time: 1468407888.6
execute f time: 1468407898.6
execute f time: 1468407908.61 # change the interval
execute f time: 1468407918.61
execute f time: 1468407928.61
私は同じproblを持っているem
お気軽に お返事ありがとうございます。
更新
[OK]を私はcrontabのをテストし、私を満たしていません。まず、私はUbuntuの中に私のユーザーの構成のcrontabのファイルに行くこれをテストするが、その後私は彼がファイル構成のcrontabに指示を書くためのライブラリを見つけたので、あなたはすべてのものを見ることができるように私は図書館にCrontab
#!/usr/bin/python
# -*- coding: utf-8 -*-
from crontab import CronTab
task = CronTab(user='cyberguille')
command='/home/cyberguille/date.py'
cron_job=task.new(command)
cron_job.setall('*/1, *, *, *, *')
task.write()
print task.render()
を使用します分実行コードですが、1分以内で実行するのは簡単ではありません(How to run scripts every 5 seconds using cron?を参照)。なぜなら、1分ごとに1分ごとに1秒間実行するとわかりません。エラーは上記の例よりもよく適合します
日付のコードです。pyがこの
#!/usr/bin/python
# -*- coding: utf-8 -*-
#import time
from datetime import datetime
tiempo = datetime.now()
#tiempo = time.strftime("%H:%M:%S")
archivo=open('/home/cyberguille/archivo_fecha.txt', 'a+')
archivo.write(str(tiempo) + '\n')
で、出力のフラグメントは本当に
2016-07-19 00:11:01.307779
2016-07-19 00:12:01.365995
2016-07-19 00:13:01.421373
2016-07-19 00:14:01.477752
2016-07-19 00:15:01.532234
2016-07-19 00:16:01.588818
2016-07-19 00:17:01.649581
2016-07-19 00:18:01.705975
2016-07-19 00:19:01.759986
2016-07-19 00:20:01.816754
2016-07-19 00:21:01.873748
2016-07-19 00:22:01.927750
2016-07-19 00:23:01.980666
2016-07-19 00:24:02.036164
2016-07-19 00:25:01.090912
2016-07-19 00:26:01.148098
あなたはそれがimportanエラーではないと言うことができるすべての1分ですが、かのうない理由00
に秒で例えば実行します2016-07-19 00:11:00.307779
2016-07-19 00:12:00.365995
2016-07-19 00:13:00.421373
2016-07-19 00:14:00.477752
多分、スクリプトの呼び出しが遅いです。
私は私に良い結果と解決策を見つけたあなたは、私は関数を呼び出すとき、私の尺度である見ることができるように、これは、0秒で一人一人分、このソリューションでスクリプト
from multiprocessing import Process
from datetime import datetime
import time
import sched
def timer(interval):
sc = sched.scheduler(time.time, time.sleep)
sc.enter(1, 1, do_something, (sc,interval))
sc.run()
def do_something(sc,interval):
dateTime = datetime.now()
if(dateTime.second%interval==0):
p = Process(target=SensorContainer.run,args=(dateTime,))
p.start()
sc.enter(1, 1, SensorContainer.do_something, (sc,interval,))
def run(datetime):
print datetime
タイマーの仕事です、それはcrontabと同じではありませんが、いずれにしても、実行関数の内部で時間をとってテストするのは0秒です。
linuxを使用していますが、これはPythonでシェルコマンドを実行することができます。このコードはoythonで開発されたシステムの一部であるためです。あなたは、なぜPython上よりもOSでうまくいくのが良いかについてのあなたの答えを広げることができますか? – Cyberguille
@Cyberguille私は自分の答えを編集しました – DeepSpace
私はあなたのアドバイスをテストし、すぐに私のために働くことができたら、私は投票してあなたの答えを受け入れることができます – Cyberguille