我正在尝试为我的项目实现一个简单的烧瓶登录系统,但过了一会儿,服务器崩溃了,我在日志中得到了这个:
2017-02-13 19:06:56,833 [ Thread-393][ pool][ ERROR] Exception during reset or similar
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/pool.py", line 687, in _finalize_fairy
fairy._reset(pool)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/pool.py", line 829, in _reset
pool._dialect.do_rollback(self)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/default.py", line 440, in do_rollback
dbapi_connection.rollback()
ProgrammingError: SQLite objects created in a thread can only be used in that same thread.The object was created in thread id 140323586025216 and this is thread id 140323602810624
2017-02-13 19:06:56,834 [ Thread-393][ pool][ ERROR] Exception closing connection <sqlite3.Connection object at 0x7f9fc47ce200>
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/pool.py", line 300, in _close_connection
self._dialect.do_close(connection)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/default.py", line 446, in do_close
dbapi_connection.close()
ProgrammingError: SQLite objects created in a thread can only be used in that same thread.The object was created in thread id 140323586025216 and this is thread id 140323602810624
2017-02-13 19:16:53,257 INFO sqlalchemy.engine.base.Engine BEGIN (implicit)
2017-02-13 19:16:53,257 [ Thread-1179][ log][ INFO] BEGIN (implicit)
2017-02-13 19:16:53,258 INFO sqlalchemy.engine.base.Engine SELECT users.id AS users_id, users.username AS users_username, users.password AS users_password, users.disp AS users_disp
FROM users
WHERE users.username IN (?) AND users.password IN (?)
LIMIT ? OFFSET ?
2017-02-13 19:16:53,258 [ Thread-1179][ log][ INFO] SELECT users.id AS users_id, users.username AS users_username, users.password AS users_password, users.disp AS users_disp
FROM users
WHERE users.username IN (?) AND users.password IN (?)
LIMIT ? OFFSET ?
2017-02-13 19:16:53,258 INFO sqlalchemy.engine.base.Engine ('RicardoS', 'rvs92', 1, 0)
2017-02-13 19:16:53,258 [ Thread-1179][ log][ INFO] ('RicardoS', '1234', 1, 0)
2017-02-13 19:16:56,231 [ Thread-1176][ pool][ ERROR] Exception during reset or similar
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/pool.py", line 687, in _finalize_fairy
fairy._reset(pool)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/pool.py", line 829, in _reset
pool._dialect.do_rollback(self)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/default.py", line 440, in do_rollback
dbapi_connection.rollback()
ProgrammingError: SQLite objects created in a thread can only be used in that same thread.The object was created in thread id 140323619596032 and this is thread id 140323611203328
2017-02-13 19:16:56,231 [ Thread-1176][ pool][ ERROR] Exception closing connection <sqlite3.Connection object at 0x7f9fc46fe858>
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/pool.py", line 300, in _close_connection
self._dialect.do_close(connection)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/default.py", line 446, in do_close
dbapi_connection.close()
ProgrammingError: SQLite objects created in a thread can only be used in that same thread.The object was created in thread id 140323619596032 and this is thread id 140323611203328
2017-02-13 19:22:16,394 [ MainThread][ runserver][ ERROR] Uncaught exception
Traceback (most recent call last):
File "runserver.py", line 366, in <module>
main()
File "runserver.py", line 362, in main
host=args.host, port=args.port, ssl_context=ssl_context)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 843, in run
run_simple(host, port, self, **options)
File "/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py", line 694, in run_simple
inner()
File "/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py", line 659, in inner
srv.serve_forever()
File "/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py", line 499, in serve_forever
HTTPServer.serve_forever(self)
File "/usr/lib/python2.7/SocketServer.py", line 233, in serve_forever
self._handle_request_noblock()
File "/usr/lib/python2.7/SocketServer.py", line 292, in _handle_request_noblock
self.handle_error(request, client_address)
File "/usr/lib/python2.7/SocketServer.py", line 290, in _handle_request_noblock
self.process_request(request, client_address)
File "/usr/lib/python2.7/SocketServer.py", line 607, in process_request
t.start()
File "/usr/lib/python2.7/threading.py", line 736, in start
_start_new_thread(self.__bootstrap, ())
error: can't start new thread
登录的部分是这一部分:
engine = create_engine('sqlite:///login.db', connect_args={'check_same_thread': False}, echo=True)
app = Flask(__name__)
app.secret_key = os.urandom(12)
def do_login(self):
POST_USERNAME = str(request.form['username'])
POST_PASSWORD = str(request.form['password'])
Session = sessionmaker(bind=engine)
s = Session()
query = s.query(User).filter(User.username.in_([POST_USERNAME]), User.password.in_([POST_PASSWORD]) )
result = query.first()
if result:
session['logged_in'] = True
else:
flash('Password Errada!')
return render_template('login.html')
请帮助,我无法解决这个问题,我尝试了所有可以找到的修复