Python多线程处理数据库行

2024-04-25 23:39:37 发布

您现在位置:Python中文网/ 问答频道 /正文

给出以下简单代码:

cur.execute("SELECT * FROM myTable")

for row in cur.fetchall():
    process(row)

如果数据库很大,则需要很长时间来处理所有行。如何使用多线程来帮助我?具体地说,每一行应该只处理一次,所以当多线程时,每个线程只处理ID

我需要基本上得到数据库的总长度,决定需要多少线程,然后基本上告诉每个线程它应该过滤的最小/最大id吗?在


Tags: 代码infromid数据库forexecutemytable
1条回答
网友
1楼 · 发布于 2024-04-25 23:39:37

因为pythongil限制了线程中的并行性,所以最好使用子进程而不是线程。您可以使用一个池来限制并发进程的数量,这样就不会过度提交服务器。multiprocessing模块应该能做到这一点。游标已经是一个迭代器,当调用map时,它只会根据需要拉取数据。我不知道你的行的大小或所占用的处理时间,所以我选择了一个适中的chunksize和默认的池大小,即机器上的核心数。在

import multiprocessing as mp

pool = mp.Pool()

cur.execute("SELECT * FROM myTable")

for result in pool.map(process, cur, chunksize=5):
    print(result)

您可以通过替换

^{pr2}$

相关问题 更多 >