将asyncio,多处理或多线程用于发布请求是否很好

问题描述

我有一个故事,其中通过Web服务发送动态填充的xml文档。这是我在python3.x中使用的内容:

import requests
import pandas as pd

df = pd.DataFrame({'A': ['a','b','a','g','h','m','e'],'B': ['b','c','a'],'C': [1,2,3,4,5,6,7]})

headers = {'content-type':'text/xml'}

for index,row in df.iterrows():
    if row['B'] == 'a':
        a_wsdl = 'wsdl url'
        body = """
        <?xml version="1.0"?>

        <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope/" soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
        <soap:Header/>
        <soap:Body>
          <soap:Fault>
          """+str(row['C'])+"""
          </soap:Fault>
        </soap:Body>
        </soap:Envelope>
        """
        
        requests.post(a_wsdl,data=body,headers=headers)
        
    elif row['B'] == 'b':
        b_wsdl = 'wsdl url'
        body = """
        <?xml version="1.0"?>

        <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope/" soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
        <soap:Header/>
        <soap:Body>
          <soap:Fault>
          """+str(row['A'])+"""
          </soap:Fault>
        </soap:Body>
        </soap:Envelope>
        """
        
        requests.post(b_wsdl,headers=headers)
        
    else:
        c_wsdl = 'wsdl url'
        body = """
        <?xml version="1.0"?>

        <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope/" soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
        <soap:Header/>
        <soap:Body>
          <soap:Fault>
          """+str(row['A'])+str(row['C'])+"""
          </soap:Fault>
        </soap:Body>
        </soap:Envelope>
        """
        
        requests.post(c_wsdl,headers=headers)
        

使用此方法,我成功地发布了第1,第3,第5,第6,第7迭代,但是缺少第2和第4记录。 我以为发生这种情况的原因是在1至5日之间常见的b_wsdl忙得不可开交。因此,我考虑使用time.sleep(),但这将使代码花费更长的时间。

那时候,我想到了使用三种著名的解决方案之一:asyncio,多处理或多线程。但是,由于WSDL的繁忙是一个问题,因此我不确定哪一个适合我的情况。

有什么想法吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)