2010-12-30 11 views
0

私はpython sched(task schedular)について読んでいます、それはcronのように動作します。
しかし、私は質問があります。質問python sched schedularについて

  • は、私はすべての2時間後にRYNする機能をスケジュールし、その間に私のシステムがシャットダウンしてしまった場合、その後、私はもう一度システムを再起動して言うことができますが...やりましたschedularが自動的に起動し、2時間後に機能を実行しますか?または私はシステムをシャットダウンした後にそれを再開しなければなりませんか?

  • デーモンのような仕事をスケジューリングしましたか?

+1

「sched」のソースを読んだことがありますか?それは135行のコードです。それのどの部分を理解するのが難しいですか? –

+0

私は初心者ですので理解できませんでした。私が尋ねたいのは、turbogearがasmini cronと言っていることです。http://www.razorvine.net/download/kronos.py。しかしそれを使用してsched。どのようにしてcronにすることができますか? – samy

答えて

1

いいえです。

schedはcronとは異なります。汎用タイマーまたはカウンター関数と遅延関数を使用して、特定の時間の後に関数呼び出しをスケジュールすることができます(汎用タイマー関数で定義されたイベント)。

ファイルまたはdbに書き込むことによって状態を維持しない限り、プログラムを閉じた後は実行されません。これは複雑で、cronを使う方が良いでしょう。

schedはイベントでは動作しますが、バックグラウンドでは動作しません。だから、まさにデーモンではありませんが、OSの機能を使ってバックグラウンドでプログラムを実行することは可能です。

+0

ありがとうございました。しかし、あなたがturbogearで見ることができれば、http://docs.turbogears.org/TGScheduler、彼らはスケジューリングのためにschedを使用しました。スケジュールされた機能をサービスに残しておけば、再起動しても機能しますか? – samy

+0

このようになっています:http://www.razorvine.net/download/kronos.py – samy

+0

クロノスとTGSchedulerは、スケジューリングタスクの基本的な前提のより高いレベルのabstrationsです。具体的な時間ベースのタスク(月の初日など)を定義するように見えるので、アプリケーションが再起動されても動作しますが、セッションが維持されないためインターバルベースは機能しません。それらは実行を別のタスクにフォークし、バックグラウンドでプロセスとして実行されます。私が言ったように、彼らはちょうどschedよりも多くのもの(OS関連、スレッド化、および日時を使った具体的なイベント)を使うようです。 –

0

これがそうなら:
これはシステムの再起動後も機能しますか?
答え:いいえ、そして、どのようにturbogearスケジューラがcronでcronosを使って走れるのですか?ターボエンジンのスケジュールされたイベントは、システムの再起動後も消えます。
私が間違っている場合は私を訂正してください。

import time 
import sched 
import datetime 
import threading 
import calendar 
#from datetime import datetime 


class test: 

    def __init__(self): 
     self.name = '' 

    def getSec(self): 

     now = datetime.datetime.now() 
     print "now - ", now 
     currentYear = now.year 
     currentMonth = now.month 
     currentDay = now.day 
     currentHour = now.hour 
     currentMinute = now.minute 
     currentSecond = now.second 
     currentMicroseconds = now.microsecond 
     command = "python runbackup.py" 
     print "command is - ", command 

     print "currentMinute - ", currentMinute 
     print "currentSecond - ", currentSecond 
     # current time 
     a = datetime.datetime(currentYear, currentMonth, currentDay, currentHour, currentMinute, currentSecond, currentMicroseconds) 

     last_date_of_current_month = calendar.monthrange(currentYear, currentMonth)[1] 
     print "last_date_of_current_month - ", last_date_of_current_month 
     b = datetime.datetime(currentYear, currentMonth, int(last_date_of_current_month), 23, 59, 59, 000000) 
     #b = datetime.datetime(currentYear, currentMonth, int(29), 18, 29, 00, 000000) 
     #print "date time of b is - %s %s " % (18, 29) 

     c = b-a 
     print "c is - ", c 

     time.sleep(1) 
     scheduler = sched.scheduler(time.time, time.sleep) 
     #scheduler.cancel(e1) 
     sec = c.seconds 
     print "second - ", sec 
     print "scheduler entered." 
     e1 = scheduler.enter(sec, 1, self.getSec,()) 
     t = threading.Thread(target=scheduler.run) 
     print "thread started." 
     print "======================================" 
     t.start() 

     #scheduler.cancel(e1) 
     #print "canceled." 

     return True 

if __name__=='__main__' : 
    obj = test() 
    obj.getSec()