我遇到一个问题,在使用 Gunicorn (gevent) 运行的 django (3.2) Web 应用程序中实现的一个 API 必须从多个 API 获取不同的价格,并将这些价格存储在数据库 (Postgres 13) 中,然后再返回客户端。我想将插入放在同一个事务中,因此如果发生意外情况,则不会插入任何内容。
我现在首先调用所有 api,每个 api 都在一个绿色线程(gevent)内,然后在所有 api 返回后,我批量插入结果。
但事实证明,我真的很好奇不同的线程(绿色或非绿色)是否可以共享相同的事务。我看到 psycopg2 可以以非阻塞方式执行。现在的问题是每次我在 django 中启动线程时,新线程都位于新事务中。我将深入研究 django db 后端源代码以了解发生了什么,但也许有人可以解决这个问题。
太棒了;不同的线程可以在同一事务内执行查询吗?