我是一个相当新手的程序员,我第一次接触到多处理。在遇到常见的酸洗错误后,我在这里搜索并发现 Pathos 可能是最好的使用方法。
完整的应用程序的要点是它使用 ssh 连接到一组服务器,将数据拉出并将其存储到数据库中。它工作得很好,但如果它运行多处理显然是有益的。
原始函数调用如下所示:
devices = sq.sqlOperation("SELECT * from Devices")
for device in devices:
pullNewData(device)
简而言之,SQL 查询给了我一个字典列表,我为每个记录提供 pullNewData() 一个字典,它执行、连接、提取所有内容并更新数据库。
我宁愿不重写几千行代码,所以我希望适应它会很容易:以下所有示例都有:
from pathos.multiprocessing import ProcessingPool as Pool
在顶部。我试过了:
devices = sq.sqlOperation("SELECT * from Devices")
p = Pool(4)
p.apipe(pullNewData, devices)
即使尝试/除外,它也默默地失败了
devices = sq.sqlOperation("SELECT * from Devices")
p = Pool(4)
p.map(pullNewData, devices)
同样,静默失败:
然而:
devices = sq.sqlOperation("SELECT * from Devices")
p = Pool(4)
for data in devices:
p.apipe(pullNewData(data))
工作,但只是依次经历了每一个。
在绝望中,我什至尝试将其放入列表理解中(是的,这非常丑陋,但那时我会做任何事情)
devices = sq.sqlOperation("SELECT * from Devices")
p = Pool(4)
[ p.apipe(pullNewData(data)) for data in devices ]
那么,我该怎么做呢?我如何让它以并行方式为每条记录启动一个新连接?