将修饰的进程内函数调用分派给云函数以执行

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

^{pr2}$

现在,每次调用update_related,完整的参数列表都被序列化、压缩并推送到PubSub。同样包含相同函数的云函数将接收消息并执行代码。在

有关安装和使用,请参阅Project Documentation。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Cassandra DB的javascript查询结果   java定时器任务调度   java在TLS上实现LDAP   为什么在浏览器中滚动会使java小程序闪烁?   未使用轮询器和serviceactivator提取java pubsub消息   java风暴多线程问题   java计算平均成绩   java将字符串添加到另一个类的数组列表中   文件Java路径如何转换为例如InputStream   java更改JComboBox的字体颜色   java inthttp:具有可轮询请求通道的inboundgateway   使用继承在Java中运行swing Base和扩展windows   java ivysettings。xml:添加本地maven路径   java如何将参数自定义视图传递给activity类   java延迟加载无法在Hibernate中使用一对一映射   当文件以“file:/”开头时,Java无法识别该文件   需要java正则表达式帮助,使用反斜杠   片段中的java GWT参数