python - Python异步写入数据库
问题描述
我正在尝试从 Dialogflow Fulfillment 写入 Cloud SQL (MySQL)。后端托管在 App Engine 中,我正在使用公共 IP 访问 Cloud SQL(其他应用程序也使用相同的数据库,因此我目前没有使用私有 IP 的选项)。基本上一切正常,但写入数据库所需的时间比允许的会话时间长,所以我在 Dialogflow 上收到 DEADLINE_EXCEEDED 错误。
问题是我不需要等待数据写入数据库。所以我想知道是否可以使用一些异步技巧来处理写入过程。
例如:
.
.
.
# Take input from users.
# Save them in variables.
# Make a JSON file
write_to_db(JSON_file)
# Don't wait for the response from the above funciton
.
.
.
# Continue with the rest and return if necessary
有没有办法在python中实现这一点?
编辑
写入 Cloud SQL 的代码。
import sqlalchemy
import logging
import os
connection_name = ""
db_name = ""
db_user = ""
db_password = ""
driver_name = 'mysql+pymysql'
query_string = dict({"unix_socket": "/cloudsql/{}".format(connection_name)})
.
.
.
def insert_reservation():
REST_ID = "0010"
RESV_ID = "0020"
RESV_DT = "12082020"
USER_ID = "1234"
RESV_TM = "1040"
RESV_PERSON_NU = "4"
USER_COMMENT = "some Comment"
stmt = sqlalchemy.text("INSERT INTO table_name (REST_ID, RESV_ID, RESV_DT, USER_ID, RESV_TM, RESV_PERSON_NU, USER_COMMENT) values ('{}', '{}', '{}', '{}', '{}', '{}', '{}');".format(
REST_ID,
RESV_ID,
USER_ID,
RESV_DT,
RESV_TM,
RESV_PERSON_NU,
USER_COMMENT
))
db = sqlalchemy.create_engine(
sqlalchemy.engine.url.URL(
drivername=driver_name,
username=db_user,
password=db_password,
database=db_name,
query=query_string,
),
pool_size=5,
max_overflow=2,
pool_timeout=30,
pool_recycle=1800
)
try:
with db.connect() as conn:
conn.execute(stmt)
except Exception as e:
logging.info("SQL Error: {}".format(str(e)))
#return 'Error: {}'.format(str(e))
return 'ok'
.
.
.
如前所述,这可以正常工作,但唯一的问题是速度很慢。有什么建议可以提高速度或交给另一个线程来处理吗?
解决方案
推荐阅读
- python - 如何在 python 和节点进程之间共享 mmap
- c++ - 如何将 QString 转换为 std::chrono
- c# - PreviewLeftButtonUp 触发太晚了
- javascript - Javascript 函数不能像我想要的那样工作
- javascript - webpack 多个源文件夹
- sql - 如果满足条件,SQL 将状态应用于帐户的每一行
- oracle - Oracle 数据建模器不保存 dmd 文件
- java - 从 Python 访问 Hadoop -- java.io.IOException: 管道已结束
- python - PyTorch 和精确解析表达式的区别
- javascript - 如何将我的选择放在我的开关旁边?