我正在构建一个客户端,以从通过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))
如果我的代码或使用这个概念有什么不对,我将不胜感激。
此致