4
Python: 2.7.3

Flask: 0.9

こんにちは、を使ってカーシミュレーターを作りたいですApscheduler。各車にはdistance、データベースに定期的に増分される列があります。

これがインポート部分です

from __future__ import with_statement
from flask import Flask, request, session, g, redirect, url_for, \
    abort, render_template, flash, views
from sqlite3 import dbapi2 as sqlite3
from contextlib import closing
from apscheduler.scheduler import Scheduler

コードのスニペットは次のとおりです。

sched = Scheduler()
sched.add_interval_job(moveAllCars, seconds = 5)
sched.start()

def moveAllCars():
    print "debug 1"
    dbCommand = g.db.execute('SELECT CarID FROM Car')
    print "debug 2"
    #and so on

「debug1」の直後にエラーメッセージが表示されたため、完全なコードを記述しませんでした。ロガー「apscheduler.scheduler」のハンドラーが見つかりませんでした。Googleはあまり役に立ちません。

しかし、スケジューラーはまだ実行中であり、5秒ごとに「debug1」のみを出力します。エラーメッセージは、最初のループでのみ表示されます。

誰もが解決策を知っていますか?前に感謝します

[アップデート]

を使用した後logging、それがRunTimeErrorであることがわかりました:リクエストコンテキストの外で動作しています。で使用する以外に他の解決策はありますapp.test_request_contextか?

4

2 に答える 2

4

gおそらくthreading.local()です。スレッドが異なれば、その中の値も異なります。

g.dbおそらく、リクエストごとに新しいデータベース接続が割り当てられます。現在のリクエストはありません–接続はありません。

move_all_cars()でdb接続を作成するか、パラメーターとして明示的に渡すことができます。

于 2012-09-07T17:19:13.123 に答える
3
from os import getcwd
import logging
logging.basicConfig(
        filename=''.join([getcwd(), '/', 'log_file_name']),
        level=logging.DEBUG,
        format='%(levelname)s[%(asctime)s]: %(message)s'
)

上記は私の場合に役立ちました。

KAcper

于 2012-09-29T08:41:00.407 に答える