4

RSSフィードからの情報を表示するFlask Webアプリがあります。RSS フィードを定期的に、たとえば 30 分ごとに処理したいと考えています。情報の一部を抽出し、sqlite db に保存します。

しかし、関数を特定の間隔でスケジュールする方法がわかりません。

私は APScheduler を使用しました。コードは次のとおりです。

def main():
    # Start the scheduler
    filename = os.path.abspath(os.path.join(os.path.dirname( __file__ ), '..', 'tmp')) + '\\' + 'spider.log'
    logging.basicConfig(filename=filename, level=logging.DEBUG,format='%(levelname)s[%(asctime)s]: %(message)s')
    sched = Scheduler()
    sched.start()
    sched.add_interval_job(run_job, minutes=30)
    time.sleep(9999)

run.py関数があります

from app import app, spider

spider.main()
app.run(debug=True)

app.run(debug=True)Flask Web アプリが起動します。問題は、コードが到達しないことapp.runです。

別のプロセスを生成してspider.main()呼び出しを処理し、そのプロセスをバックグラウンドで実行することは可能ですか? または、別のアプローチを使用する必要がありますか?

NB: Flask-Celery を使用できることはわかっていますが、この小さなアプリでは重すぎるようです...

4

1 に答える 1

4

必要ありませんtime.sleep- 実行するspider.mainと、スケジューラが起動し、プロセスが 9999 秒間スリープ状態になります。その後、次の行が実行されます。そのため、開始app.runから 2.78 時間後にspider.main開始されます。

したがってspider、次のようになります。

def main():
    # Start the scheduler
    filename = os.path.abspath(os.path.join(os.path.dirname( __file__ ), '..', 'tmp')) + '\\' + 'spider.log'
    logging.basicConfig(filename=filename, level=logging.DEBUG,format='%(levelname)s[%(asctime)s]: %(message)s')
    sched = Scheduler()
    sched.start()
    sched.add_interval_job(run_job, minutes=30)
于 2012-07-10T01:51:36.973 に答える