Python API: 同步多线程数据库查询

Python API: synchronous multithreaded DB queries

我有一个 Python 烧瓶 API 可以对对象应用一些 SQL 过滤。

API 工作流程的步骤:

API的约束:

进行的测试: 在进行一些测试时,我发现我可以并行进行读取查询。我做的测试是:

from sqlalchemy import create_engine
import os
import time


engine = create_engine(
    os.getenv("POSTGRES_URL")
)

def run_query():
    with engine.connect() as conn:
        rs = conn.execute(f"""
            SELECT
                * 
                , pg_sleep(5)
            FROM users
        """)

        for row in rs:
            print(row)

if __name__ == "__main__":
    start = time.time()
    for i in range(5):
        run_query()

    end = time.time() - start
from sqlalchemy import create_engine
import os
import threading
import time

engine = create_engine(
    os.getenv("POSTGRES_URL")
)

def run_query():
    with engine.connect() as conn:
        rs = conn.execute(f"""
            SELECT
                * 
                , pg_sleep(5)
            FROM users
        """)

        for row in rs:
            print(row)

if __name__ == "__main__":
    start = time.time()
    threads = []
    for i in range(5):
        t = threading.Thread(target=run_query)
        t.start()
        threads.append(t)

    for t in threads:
        t.join()
    end = time.time() - start

问题:

非常感谢您的帮助!

这远远超出了合理的范围。通过对内置连接池的 pool_size 进行一些调整,您可以轻松地同时进行 100 个 pg_sleep。但是一旦你改变它来做真正的工作而不仅仅是睡觉,它就会分崩离析。你只有那么多 CPU 和那么多磁盘驱动器,而且这个数字可能还不到 100。

您应该首先查看那些读取的查询,看看为什么它们很慢,以及是否不能通过索引或其他方式使它们更快。