多线程调用WSDL web服务

2024-10-02 00:24:17 发布

您现在位置:Python中文网/ 问答频道 /正文

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

下面是一个python脚本的例子,在这个例子中,我提到了How to use threading in Python?以及许多其他的SOF问题。在

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))

无论是我的代码有什么问题,还是我对这个概念的使用有什么问题,我都会很感激你的帮助。在

问候


Tags: 项目fromimport数据库sessionmy线程array

热门问题