我是一个相当新手的程序员,我第一次把我的手放在多处理器上。在遇到通常的酸洗错误后,我在这里搜索,发现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)
其中默默地失败,即使有一个try /只是绕着它
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)'?(来检查你是如何使用pathos的问题,或者如果它是代码中的同步问题) – thebjorn
好吧,经过一些似乎现在一齐解雇他们的小事,但我遇到了另一个问题paramiko连接似乎不起作用。嗯... –
总之,谢谢,那就是了。解决了我的代码的一些问题后,我们开始了! –