gpt4 book ai didi

python - 多处理,有问题

转载 作者:太空宇宙 更新时间:2023-11-03 16:19:17 25 4
gpt4 key购买 nike

我是一个相当新手的程序员,我第一次接触多处理。在遇到常见的酸洗错误后,我在这里搜索并发现 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)

即使进行了尝试/异常(exception),也默默地失败了

    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 ]

那么,我该怎么做呢?我如何让它以并行方式为每条记录触发一个新连接?

最佳答案

因此,尝试 Pool(1) 向我展示了它遇到的问题。我正在调用此文件和其他文件中的其他函数,由于该函数是一个全新的进程,它不知道,所以我必须为其他模块添加导入语句并发出

from thisModule import thisFunction

用于同一文件中的其他函数。然后我升级了池,它完美地使用:

devices = sq.sqlOperation("SELECT * from Devices")
p = Pool(4)
p.map(pullNewData, devices)

谢谢,这对我来说非常有帮助,也是一次学习经历。

我没有意识到新进程不会知道函数所在文件或其他函数中的导入语句。那好吧。非常感谢 thebjorn 为我指明了正确的方向。

关于python - 多处理,有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38654999/

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