多线程调用WSDL Web服务

时间:2017-08-22 07:27:05

标签: python multithreading wsdl soapui soap-client

我正在构建一个客户端,以从通过WSDL Web服务提供的大型数据库中获取数据。 每个请求大约需要2-3秒,因此需要几天才能获取~300k项目(300k请求)。所以我尝试做的是设置多线程,每个线程分别请求一个项目。 我尝试了C#和Python,但在这两种情况下,它都像是一个单独的线程(项目顺序输出)。 在尝试SoapUI负载测试时,它工作得更快!每个x一起回复(取决于X线程)。 我不确定我做错了什么,或者我是否应该使用除多线程之外的其他东西。

这是python脚本的一个示例,其中我在其他许多SOF问题中引用了How to use threading in Python?

import zeep
from requests import Session
from zeep import Client
from zeep.transports import Transport


session = Session()
session.verify = False
transport = Transport(session=session)

SearchItemsWSDL = 'https://WSDL_LINK?wsdl'
SearchItemsClient = Client(wsdl=SearchItemsWSDL, transport=transport)

def ItemSearcher( ItemId ):
    ItemRequest_data = {
        'DownloadOptions':{
            'ProductInfo': 'Full',
            'ProductInfoFormat': 'XML',
        },
        'ItemId': ItemId,        

    }
    response = SearchItemsClient.service.GetItemById(ItemRequest_data)
    print(response.Item.ItemName)


my_array = [322191,325393,326857,325393,322278,321851,324908,322746,324604,329211]

from multiprocessing.dummy import Pool as ThreadPool 
pool = ThreadPool(8) 
results = pool.map(ItemSearcher, my_array)


#results = []
#for item in my_array:
#    results.append(ItemSearcher(item))

如果我的代码或使用这个概念有什么不对,我将不胜感激。

此致

0 个答案:

没有答案