Asynchronous 我可以在GCP云函数中使用python-aiohttp吗?

Asynchronous 我可以在GCP云函数中使用python-aiohttp吗?,asynchronous,flask,google-cloud-platform,io,aiohttp,Asynchronous,Flask,Google Cloud Platform,Io,Aiohttp,我正在尝试将一些工作负载路由/分配到其他云函数,它们所花费的时间大致相同,但我必须同步调用它们。我试着设置它,在使用Flask实现它时,我遵循了一些人的建议,在Flask上下文之外实例化了我的循环,因为它需要控制主线程(也要返回),而且所有的事情似乎都是同步执行的,我只需要在一个对象中收集一些响应。这个简单的I/O问题似乎不适用于GCP云函数。我见过这个。这只是简单的异步,所以这应该是可行的。如果以前有人用过这个,你能举个例子吗 loop = asyncio.get_event_loop() a

我正在尝试将一些工作负载路由/分配到其他云函数,它们所花费的时间大致相同,但我必须同步调用它们。我试着设置它,在使用Flask实现它时,我遵循了一些人的建议,在Flask上下文之外实例化了我的循环,因为它需要控制主线程(也要返回),而且所有的事情似乎都是同步执行的,我只需要在一个对象中收集一些响应。这个简单的I/O问题似乎不适用于GCP云函数。我见过这个。这只是简单的异步,所以这应该是可行的。如果以前有人用过这个,你能举个例子吗

loop = asyncio.get_event_loop()
app = Flask(__name__)
CORS(app)

@app.route('/', methods=['POST'])
def calculations():
    calculations_to_perform_queue = []
            for calculation_request in request_data['calculations']:
                for calculation in calculation_request['calculation_requests']:
                    calculations_to_perform_queue.append(calculation)

    async def threaded_calculation_request_operation(session, 
        calculation_meta_data) -> dict: reference in calculations if exists
        url = calculation_meta_data['endpoint_url']
        async with session.post(
            url=url,
            headers={'X-Access-Token': request.headers['X-Access-Token']},
            json=json_safe_response(calculation_meta_data) as response:
        return await response.json()


    async def session_controler():
        async with aiohttp.ClientSession() as session:
            finished_queue = []
            for calculation in calculations_to_perform_queue:
                response = await threaded_calculation_request_operation(session, calculation)
                finished_queue.append(response)
            return finished_queue

    all_returned_charts = loop.run_until_complete(session_controler())
    prccesed_response = processed_for_return(all_returned_charts)
    return prccesed_response, 200

您不能直接使用asyncio,python运行时是沙盒,因此
asyncio.get\u event\u loop()
将出错

有一种方法可以实现异步请求调度,但此处(不清楚)记录了:


这也适用于云功能。

此代码适用于仅供参考,它只是继续同步运行。