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

我没有编写完整的代码,因为错误发生在“调试 1”之后,并显示错误消息:找不到记录器“apscheduler.scheduler”的处理程序。谷歌并没有太大帮助。

但调度程序仍在运行,每 5 秒仅打印一次“debug1”。错误消息仅在第一个循环期间出现。

有人知道解决方案吗?之前谢谢

[更新]

使用后logging,我发现它是 RunTimeError: working outside of request context。除了使用 with 之外还有其他解决方案app.test_request_context吗?

4

2 回答 2

4

g大概是一个threading.local()。不同的线程在其中看到不同的值。

g.db可能会为每个请求分配一个新的数据库连接。没有当前请求 - 没有连接。

您可以在 move_all_cars() 中创建数据库连接或将其作为参数显式传递。

于 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'
)

以上对我的情况确实有帮助。

凯珀

于 2012-09-29T08:41:00.407 回答