我正在编写一小块服务器软件,供几个用户个人使用。不是几百人,也不是数千人,但一次可能是3-10人。
因为它是一个线程服务器,所以SQLite无法工作。它抱怨这样的线程:
ProgrammingError:线程中创建的SQLite对象只能在线程id 140735085562848中创建的同一个thread.The对象中使用,这是线程id 4301299712。
此外,他们还说SQLite对并发性并不是很好。
现在,由于我开始使用Python3(并且更愿意继续使用它),我似乎无法让MySQL模块正常工作,其他模块似乎也同样沮丧。
在这种情况下,我还可以考虑Python 3的其他DB选项吗?
发布于 2009-10-10 10:20:12
首先请注意,sqlite是线程安全的
$ python
Python 2.5.2 (r252:60911, Jul 31 2008, 17:28:52)
[GCC 4.2.3 (Ubuntu 4.2.3-2ubuntu7)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqlite
>>> sqlite.threadsafety
1然后确保在每个线程中打开数据库的一个新句柄。
我使用线程本地存储来缓存数据库句柄,因此每个线程只有一个。就像这样..。(来自py2.5prog-希望它能与3.0一起工作!)
import threading
class YourClass:
def __init__(self):
#...
self.local = threading.local() # Thread local storage for db handles
self.db_file = "/path/to/db"
#...
def db_open(self):
if not getattr(self.local, "db", None):
self.local.db = sqlite3.connect(self.db_file)
return self.local.db发布于 2009-10-10 08:11:53
我对Python3做了一个端口 of psycopg2。
发布于 2009-10-11 14:49:14
我知道有一些用于火鸟的Python,但我不知道Python3中是否存在一些。
https://stackoverflow.com/questions/1547365
复制相似问题