zoukankan      html  css  js  c++  java
  • Python Celery调度Go worker

    我们可以用Go写一个计算密集型任务的Worker,然后用Python的Celery beat来调度这个Worker,下面给大家演示一下:

    1.编写Go Worker

    最好是将计算密集型的任务改造成Go语言版的,这样收益才能最大化。

    比如这里,我使用的是上回从1亿减到1的老梗。

    PS,别被下面这段代码吓到了,其实大部分是可以去掉的配置项,核心代码就几行。

    输入命令:

    go run main.go

    即可运行该worker

    2.编写Python客户端

    每5秒调度一次1亿减到1,不过不跑Python worker. 由于Go Worker在运行,这里的minus会被Go Worker消费。

    另外请注意,这里的minus函数实际上只是为了能被识别到而编写的,其内容毫无意义,直接写个pass都没问题(因为实际上是Go Worker在消费)。

    编写完后,针对go_tasks模块启动beat:

    celery -A go_tasks beat

    此时,调度器就会调度Go Worker执行任务:

     

    可以看到,我们成功用Python的Celery Beat调度了Go写的Worker!可喜可贺。

    接下来可以看看如果单纯用Python的Worker做这样的计算是有多耗时:

    启动worker:

    celery worker -A python_tasks -l info --pool=eventlet

    启动beat调度器:

    celery -A python_tasks beat

    结果如下:

    可以看到,Python从1亿减到1平均需要5.2秒左右的时间,和Go版相差了100倍左右。

    如果我们将调度器的频率提高到每秒计算1次,Python版的Worker,其任务队列一定会堵塞,因为Worker消费能力不够强大。相比之下,Go版的Worker可就非常给力了。

    转载:https://mp.weixin.qq.com/s/yyapqXD9P1ve2aah2DteiA

  • 相关阅读:
    Struts2之页面取得当前actionName
    Javascript跳转页面和打开新窗口等方法
    数据集+树的一种最简单高效的算法
    TRzCheckTree的使用
    FASTSCRIPT脚本实现多国语言
    econtrol form designer添加三方控件
    内存管理六
    内存管理五
    程序启动时只显示登录窗体
    多标签主界面使用TRzPageControl
  • 原文地址:https://www.cnblogs.com/-wenli/p/14071282.html
Copyright © 2011-2022 走看看