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
我没有编写完整的代码,因为错误发生在“debug 1”之后,并显示错误消息:找不到处理程序“apscheduler.scheduler”的处理程序。谷歌没有多大帮助。
但调度程序仍在运行,每5秒只打印一次'debug1'。错误消息仅在第一个循环期间出现。
有人知道解决方案吗?先谢谢
[UPDATE]
使用logging
后,我发现它是RunTimeError:在请求上下文之外工作。除了与app.test_request_context
一起使用之外还有其他解决方案吗?
答案 0 :(得分:3)
g
可能是threading.local()
。不同的线程在其中看到不同的值。
g.db
分配了一个新的数据库连接。没有当前请求 - 没有连接。
您可以在move_all_cars()中创建数据库连接,或者将其作为参数显式传递。
答案 1 :(得分: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'
)
以上在我的案例中有所帮助。
卡茨珀