0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何让Python和Go互相调度

科技绿洲 来源:Python实用宝典 作者:Python实用宝典 2023-11-02 11:24 次阅读

我们曾经研究过如何让Python和Go互相调度,当时发现,将Go语言写的模块打包成动态链接库,就能在Python中进行调度:

优劣互补! Python+Go结合开发的探讨

Go的优势很明显,从1亿减到1,在我的设备上测试,用Go运行只需要50ms,Python可能需要接近100倍的时间。

但是,这种写法也有缺点:实在太麻烦了,大大增加了整个项目的耦合性。

那Python中有没有办法不通过打包成动态链接库的方法,用Python调度Go的任务呢?答案是Go celery.

https://github.com/gocelery/gocelery

我们可以用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可就非常给力了。

因此,如果你的项目中有这种计算密集型的任务,可以尝试将其提取成Go版本试试,说不定有惊喜呢。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Go
    Go
    +关注

    关注

    0

    文章

    40

    浏览量

    12178
  • python
    +关注

    关注

    51

    文章

    4675

    浏览量

    83466
  • Worker
    +关注

    关注

    0

    文章

    7

    浏览量

    6416
  • 动态链接库
    +关注

    关注

    0

    文章

    10

    浏览量

    7040
收藏 人收藏

    评论

    相关推荐

    MiniProg4在POWER_DRILL2GO周期后失去与PC的连接的原因?

    再次检索它。 发生这种情况时,编程器甚至没有显示在 CYPRESS™ 编程器中,并且插拔编程器也无济于事。 在我的 Python 代码中,我在 POWER_DRILL2GO 循环芯片之前关闭了程序员的端口,尽管我认为这应该无关紧要。我很困惑。 有什么建议可以解决这个问题吗
    发表于 01-19 07:55

    Go语言开发有什么优势?怎么学?

    。  1. 部署简单。Go 编译生成的是一个静态可执行文件,除了glibc 外没有其他外部依赖。这部署变得异常方便:目标机器上只需要一个基础的系统和必要的管理、监控工具,完全不需要操心应用所需的各种包
    发表于 12-19 16:08

    python要学哪些内容?

    ;开发Python全栈开发与人工智能之自动化运维&开发学习内容包括:CMDB资产管理系统开发、IT审计+主机管理系统开发、分布式主机监控系统开发等。阶段十:高并发语言GO开发Python全栈
    发表于 03-06 16:08

    go语言能做什么工作?

    Go语言主要用作服务器端开发,其定位是用来开发“大型软件”的,适合于很多程序员一起开发大型软件,并且开发周期长,支持云计算的网络服务。Go语言能够程序员快速开发,并且在软件不断的增长过程中,它能
    发表于 03-22 15:03

    Go开发语言的优势在哪里?

    Go语言是谷歌发布的第二款开源编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性,并专门针对多处理器系统应用程序的编程进行了优化,开发速度极快,可以与C或C++媲美,而且更加安全、支持并行
    发表于 03-22 15:04

    python2和python3是如何互相切换的

    python2和python3互相切换在本地有两个Python的版本:默认使用Python2.7:可以这样查看当前版本:如果要使用
    发表于 07-12 07:53

    Python 转向 Go语言的9大原因和3大缺点

    转用一门新语言通常是一项大决策,尤其是当你的团队成员中只有一个使用过它时。今年 Stream 团队的主要编程语言从 Python 转向了 Go。本文解释了其背后的九大原因以及如何做好这一转换。
    发表于 06-17 07:40 6699次阅读

    GoPython,Erlang的语言对比分析和Go编程示例概述

    本文对GoPython、Erlang做了一些有趣的分析对比,相信大家能从中感受到Go语言的强大和与众不同。
    的头像 发表于 07-21 09:52 7398次阅读
    <b class='flag-5'>Go</b>和<b class='flag-5'>Python</b>,Erlang的语言对比分析和<b class='flag-5'>Go</b>编程示例概述

    Go语言其实有很多优良特性,很多时候都可以代替Python

    Go 要想撼动编程界的常青树 Java 二十多年的地位无疑难度颇大。据 HackerRank 数据显示,2018 年,Java 在开发者最受欢迎的编程语言排行榜中仍然排名第 2,Python 排名第 4,Go 排名第 13,
    的头像 发表于 02-13 10:01 4510次阅读

    Mybridge AI推出了一个Python开源项目Top 30榜单

    Grumpy是一个Python to Go的源代码翻译编译器和运行时,旨在取代CPython 2.7。关键区别在于,Grumpy是将Python源码编译为Go源代码,然后将其编译为na
    的头像 发表于 04-27 18:36 3661次阅读

    golang的调度模型-GPM 模型的源码结构

    【导读】GMP 模型是让 go 语言轻量快速高效的重要调度模型,本文从 GMP 源码出发直观地解析了这一模型。 这篇文章就来看看 golang 的调度模型-GPM 模型的源码结构。 Go
    的头像 发表于 07-06 11:55 1919次阅读

    详解剖析Go语言调度模型的设计

    golang的MPG调度模型是保障Go语言效率高的一个重要特性,本文详细介绍了Go语言调度模型的设计。 前言 Please remember that at the end of th
    的头像 发表于 07-26 10:12 1758次阅读
    详解剖析<b class='flag-5'>Go</b>语言<b class='flag-5'>调度</b>模型的设计

    Go/Rust挑战Java/Python地位

    编程语言方面,Java 和 Python 仍然遥遥领先,并且分别微小增长了 1.7% 和 3.4%;围绕 Go (增长 20%) 和 Rust (增长 22%) 的兴趣则大幅增加。报告称,如果这种
    的头像 发表于 03-06 10:19 500次阅读

    Go在单线程计算性能上的优势

    ,将计算和保存的过程保存在本地的redis缓存中,然后使用Celery来调度这些任务。 问题在于,从这些网址中获取数据的步骤,写在Go Worker里是否合适?Go进行网络请求是否比Pytho
    的头像 发表于 11-02 11:16 218次阅读
    <b class='flag-5'>Go</b>在单线程计算性能上的优势

    Go语言比Python强多少

    1.都说Go语言性能非常强大,那么到底比Python强多少? 为了比较Go语言和Python语言在单线程性能上的差距,我们可以做一个简单实验,从1亿减到1:
    的头像 发表于 11-02 14:05 282次阅读
    <b class='flag-5'>Go</b>语言比<b class='flag-5'>Python</b>强多少