如何在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 

clientsuds.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上发现的一些参考文献。