如何在Python中创建多个并行SOAP请求
问题描述:
我需要通过SOAP创建大量(〜10000个)每日请求。他们的服务器设置的方式我无法对请求进行批量处理,但需要单独提出每个请求。不过,我可以同时提出很多请求。如何在Python中创建多个并行SOAP请求
,我使用的基本模式是:
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
凡client
是suds.Client()
。
这虽然失败,当我尝试调用的结果get()
,并出现以下错误信息:
suds.MethodNotFound: Method not found: 'ReferenceDataService.WSHttpBinding_ReferenceSearchService.__getinitargs__'
当我做出一系列每次调用不抛出此错误。
我可以在Python中进行多个并行SOAP调用吗?
答
我也遇到过这个问题。在我的情况下,根本原因是我的代码试图缓存调用的结果,特别是当缓存层尝试序列化结果时。结果包含对suds.Client
的引用,以及试图在suds.Client.service
对象上尝试调用__getinitargs__()
的序列化尝试。然后,suds代码尝试在服务的WSDL定义中找到具有该名称的方法,但不能并因此引发异常。
从你所描述的,这可能没有相似之处。尽管如此,似乎值得分享,以防万一或其他人绊倒这个问题。 =)
以下是我在serialization in Python 2上发现的一些参考文献。