Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python异步调用单独的函数_Python_Python 3.x_Asynchronous_Python Requests_Concurrent.futures - Fatal编程技术网

Python异步调用单独的函数

Python异步调用单独的函数,python,python-3.x,asynchronous,python-requests,concurrent.futures,Python,Python 3.x,Asynchronous,Python Requests,Concurrent.futures,我有4个函数,如下所示,其中3个调用外部API来获取随机数据: def get_external_data(zip_code, info_code): data_url = MY_ENDPOINT_1.format(zip_code) data_response = requests.request( 'GET', url=data_url, headers={ 'content-Type': 'applic

我有4个函数,如下所示,其中3个调用外部API来获取随机数据:

def get_external_data(zip_code, info_code):
    data_url = MY_ENDPOINT_1.format(zip_code)
    data_response = requests.request(
        'GET',
        url=data_url,
        headers={
            'content-Type': 'application/json',
            'info-code': info_code
        }
    )
    return data_response

def get_info(info_code):
    info_url = INFO_URL.format(info_code)
    info_response = requests.request(
        'GET',
        url=info_url,
        headers={
            'content-Type': 'application/json',
            'info-code': info_code
        }
    )
    return info_response

def get_zip(zip_code):
    zip_url = zip_URL.format(zip_code)
    zip_response = requests.request(
        'GET',
        url=zip_url,
        headers={
            'content-Type': 'application/json',
            'zip-code': zip_code
        }
    )
    return zip_response

def get_all_data(info_cd, zip_code):
    data_response = get_external_data(zip_code, info_cd)
    info_response = get_info(info_cd)
    zip_response = get_zip(zip_code)
    return data_response, info_response, zip_response
我试图通过使用
get\u all\u data()
函数中的
concurrent.futures
调用3个数据函数来实现3个异步调用。从文档中我了解到,我们可以使用一个输入列表来执行一个函数,如下所示:

resp_list = list()
# Asynchronous
with ThreadPoolExecutor(max_workers=3) as executor:
    thread_responses = executor.map(self.get_info, info_list)
    for x in thread_responses:
        resp_list.append(x)

但是,在这种特殊情况下,如何使用3个不同的函数和不同的输入实现3个线程?

您可以使用执行器在自己的线程中进行每个调用。提交,如下所示:

with ThreadPoolExecutor(max_workers=3) as executor:
    data_future = executor.submit(get_external_data, zip_code, info_cd)
    info_future = executor.submit(get_info, info_cd)
    zip_future = executor.submit(get_zip, zip_code)
    # and then collect results
    results = [
        f.result()
        for f in (data_future, info_future, zip_future)
    ]
见相关文件: