python 常用的数据库驱动怎么做多线程安全?
在 django
、flask
和 fastapi
下使用诸如 pymysql
、pymongo
、elasticsearch
、redis
这些连接数据库的驱动库的时候,多个线程共用一个数据库连接是安全的吗?
比如对于 pymysql
的搞了一个全局变量作为数据库连接,在不使用事务的情况下,所有的都用这个全局变量来 crud
是线程安全的吗?会窜稀吗?
一般来说对于 pymysql
,如果是线程池,我会用 TLS
,如果像 fastapi
(实际指 uvicorn)的同步模式用的是非恒定的多线程,我就会搞一个连接池。
但是对于 pymongo
、elasticsearch
、redis
我就没有什么经验。
比如 elasticsearch
我全局化一个变量,大家都用这个变量,安全吗?
from elasticsearch import Elasticsearchfrom loggers import logger
import settings
index_name = settings.ES_CONFIG.index_name
es = Elasticsearch(
hosts=[f'{settings.ES_CONFIG.host}'],
timeout=10,
http_auth=f'{settings.ES_CONFIG.username}:{settings.ES_CONFIG.password}'
)
又比如 redis
这个库呢?
我看到有些介绍单例模式的时候,会恒定一个 redis
连接来给所有线程用来 crud
,这样是并行安全的吗?
以上是 python 常用的数据库驱动怎么做多线程安全? 的全部内容, 来源链接: utcz.com/p/938423.html