我需要通过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
client
是suds.Client()
。
但是当我尝试在结果上调用get()
时出现此错误,并显示以下错误消息:
suds.MethodNotFound: Method not found: 'ReferenceDataService.WSHttpBinding_ReferenceSearchService.__getinitargs__'
当我按顺序进行每个调用时,不会抛出此错误。
我可以在Python中进行多个并行SOAP调用吗?
答案 0 :(得分:0)
我也遇到了这个问题。我的根本原因是我的代码试图缓存调用的结果,特别是当缓存层尝试序列化结果时。结果包含对suds.Client
的引用以及尝试序列化尝试在__getinitargs__()
对象上调用suds.Client.service
的尝试。 suds代码然后尝试在服务的WSDL定义中找到具有该名称的方法,但不能并因此引发异常。
根据您所描述的内容,这可能没有相似之处。尽管如此,似乎值得分享,以防万一或其他人偶然发现这个问题。 =)
我在serialization in Python 2找到了一些有用的参考资料。