0

APScheduler を使用して、次のようにいくつかの繰り返しタスクを実行しています。

from apscheduler.scheduler import Scheduler
from time import time, sleep

apsched = Scheduler()
apsched.start()

def doSomethingRecurring():
    pass  # Do something really interesting here..

apsched.add_interval_job(doSomethingRecurring, seconds=2)

while True:
    sleep(10)

このスクリプトが終了すると interval_job が終了するため、単純に終了while Trueループを追加しました。これが最善かどうかはわかりませんが、これを行うためのpythonicの方法は言うまでもありません。これを行う「より良い」方法はありますか?すべてのヒントは大歓迎です!

4

2 に答える 2

1

このコードを試してください。Python スクリプトをデーモンとして実行します。

import os
import time

from datetime import datetime
from daemon import runner


class App():
    def __init__(self):
        self.stdin_path = '/dev/null'
        self.stdout_path = '/dev/tty'
        self.stderr_path = '/dev/tty'
        self.pidfile_path = '/var/run/mydaemon.pid'
        self.pidfile_timeout = 5

    def run(self):
        filepath = '/tmp/mydaemon/currenttime.txt'
        dirpath = os.path.dirname(filepath)
        while True:
            if not os.path.exists(dirpath) or not os.path.isdir(dirpath):
                os.makedirs(dirpath)
            f = open(filepath, 'w')
            f.write(datetime.strftime(datetime.now(), '%Y-%m-%d %H:%M:%S'))
            f.close()
            time.sleep(10)


app = App()
daemon_runner = runner.DaemonRunner(app)
daemon_runner.do_action()

使用法:

> python mydaemon.py
usage: md.py start|stop|restart
> python mydaemon.py start
started with pid 8699
> python mydaemon.py stop
Terminating on signal 15
于 2014-09-03T10:40:17.267 に答える
1

ブロッキング スケジューラを使用してみてください。apsched.start() はブロックするだけです。開始する前に設定する必要があります。

編集: コメントに応じた擬似コード。

apsched = BlockingScheduler()

def doSomethingRecurring():
    pass  # Do something really interesting here..

apsched.add_job(doSomethingRecurring, trigger='interval', seconds=2)

apsched.start() # will block
于 2014-09-03T10:41:34.780 に答える