gpt4 book ai didi

python - 优化网络绑定(bind)多处理代码

转载 作者:行者123 更新时间:2023-11-28 17:34:39 26 4
gpt4 key购买 nike

我有一个使用 multiprocessing.Pool 调用的函数

像这样:

from multiprocessing import Pool

def ingest_item(id):
# goes and does alot of network calls
# adds a bunch to a remote db
return None

if __name__ == '__main__':
p = Pool(12)
thing_ids = range(1000000)
p.map(ingest_item, thing_ids)

pool.map 正在迭代的列表包含大约 100 万个项目,对于每个 ingest_item() 调用,它将去调用第 3 方服务并将数据添加到远程 Postgresql 数据库。

在 12 核机器上,这会在 24 小时内处理约 1,000 个 pool.map 项目。 CPU 和 RAM 使用率低。

我怎样才能让它更快?

切换到线程是否有意义,因为瓶颈似乎是网络调用?

提前致谢!

最佳答案

首先:记住您正在执行网络任务。您应该期望您的 CPU 和 RAM 使用率较低,因为网络比您的 12 核机器慢几个数量级。

也就是说,每个请求一个进程是一种浪费。如果您开始遇到启动太多进程的问题,您可以尝试 pycurl,如此处建议的那样 Library or tool to download multiple files in parallel

这个 pycurl 示例看起来与您的任务非常相似 https://github.com/pycurl/pycurl/blob/master/examples/retriever-multi.py

关于python - 优化网络绑定(bind)多处理代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31731829/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com