Flink有状态功能,使用python SDK进行异步调用

时间:2020-06-29 14:25:32

标签: apache-flink flink-statefun

我正在使用Python SDK尝试使用Stateful Functions 2.1 API,但我看不出如何在不阻止应用程序的情况下对外部api进行异步调用的清晰方法。

这可能吗?或者有人可以在正确的路径上送我吗?

1 个答案:

答案 0 :(得分:1)

从StateFun 2.2.0开始,您可以使用AsyncRequestReplyHandler。

来自docs

Python SDK附带了一个附加处理程序, AsyncRequestReplyHandler,支持Python的等待函数 (协程)。该处理程序可以与异步Python一起使用 框架,例如aiohttp。

@functions.bind("example/hello")
async def hello(context, message):
   response = await compute_greeting(message)
   context.reply(response)

from aiohttp import web

handler = AsyncRequestReplyHandler(functions)

async def handle(request):
   req = await request.read()
   res = await handler(req)
   return web.Response(body=res, content_type="application/octet-stream")

app = web.Application()
app.add_routes([web.post('/statefun', handle)])

if __name__ == '__main__':
  web.run_app(app, port=5000)

您可以看到here的完整示例。