将修饰的进程内函数调用分派给云函数以执行
cloud-functions-dispatch的Python项目详细描述
云功能调度
Cloud Functions Dispatch使您能够通过对函数应用decorator来调度对远程云函数的进程内无响应函数调用。在
这对于以下任务非常有用:
- 与此过程分开更新数据库记录
- 运行辅助进程作为接收请求的副作用
- 把一个大任务分成独立完成的大块
基本上,任何接受一组可序列化参数但不接受任何进程内状态且不需要返回值的任务都是进行分派的最佳候选任务。在
函数是异步执行的,没有向调用方返回值的机制。从调用者的角度来看,这些函数是“fire and forget”。对返回值的函数的支持可能在将来的版本中实现。在
示例
假设您有一个函数,每次在某个表中的某一行时都会调用该函数:
defsave(users,context):foruserinusers:user.save()update_related(user,context)defupdate_related(user,context):entity=db.retrieve(user.id)foriteminentity.get_related():item.last_updated=context.update_timeitem.save()
请注意,这段代码故意效率低下,只是为了证明这一点;假设update_related
每个用户需要10秒,而您可能一次要为数千个用户这样做。您的进程将为资源而斗争:执行工作时将消耗时间、内存或线程。现在假设你每隔几秒钟就运行一次这样的作业。你的代码会窒息。在
处理这种情况的一种方法是将update_related
发送到一个单独的云函数来执行。但是你必须定义函数,以某种方式整理数据,然后调用函数。虽然这些任务在理论上很简单,但有一些复杂性使它们在实践中具有挑战性。在
使用cloud_functions_dispatch
,对上面代码所需的唯一更改是装饰update_related
:
现在,每次调用update_related
,完整的参数列表都被序列化、压缩并推送到PubSub。同样包含相同函数的云函数将接收消息并执行代码。在
有关安装和使用,请参阅Project Documentation。在
- 项目
标签: