如何在Python中创建多个并行SOAP请求

时间:2016-02-19 17:19:32

标签: python soap parallel-processing

我需要通过SOAP做很多(~10000)每日请求。他们的服务器设置方式我不能批量处理请求,而是需要单独发出每个请求。但是,我可以同时发出许多请求。

我使用的基本模式是:

import multiprocessing as mp

ids = client.get_available_ids()
pool = mp.Pool(processes=10)
results = [mp.apply_async(download, args=(client, x)) for x in ids]
data = [y.get(timeout=1) for y in results]

def download(client, reference):
    response = client.get_data(reference)
    return response

clientsuds.Client()

但是当我尝试在结果上调用get()时出现此错误,并显示以下错误消息:

suds.MethodNotFound: Method not found: 'ReferenceDataService.WSHttpBinding_ReferenceSearchService.__getinitargs__'

当我按顺序进行每个调用时,不会抛出此错误。

我可以在Python中进行多个并行SOAP调用吗?

1 个答案:

答案 0 :(得分:0)

我也遇到了这个问题。我的根本原因是我的代码试图缓存调用的结果,特别是当缓存层尝试序列化结果时。结果包含对suds.Client的引用以及尝试序列化尝试在__getinitargs__()对象上调用suds.Client.service的尝试。 suds代码然后尝试在服务的WSDL定义中找到具有该名称的方法,但不能并因此引发异常。

根据您所描述的内容,这可能没有相似之处。尽管如此,似乎值得分享,以防万一或其他人偶然发现这个问题。 =)

我在serialization in Python 2找到了一些有用的参考资料。