网易首页 > 网易号 > 正文 申请入驻

Python 现在可以运行 Mojo 了?

0
分享至

作者 | Vincent 编译 | 苏宓

出品 | CSDN(ID:CSDNnews)

两年前,Swift 之父、编译器大神 Chris Lattner 和 Google 前员工 Tim Davis 组队创立了初创公司 Modular,推出了高性能编程语言 Mojo。凭借“比 Python 快 90000 倍”的惊人宣传语,Mojo 成为整个开发者社区关注的焦点,被认为是“可能彻底改变 Python 命运”的新语言。

Chris Lattner 曾这样描述 Mojo:“ 它是 Python 家族的一员,汲取了所有这些酷炫的语言、编译器和其他技术,让 Python 向前迈进了一大步。我们认为它增强了 Python 的能力,赋予 Python 程序员超能力,让熟悉 Python 的人能够学习新知识,探索并征服新领域,而无需转用 C++。”

而如今,Chris Lattner 低调放出了一个意味深长的新变化:Python 现在可以直接调用 Mojo 代码了。

AI 产品爆发,但你的痛点解决了吗?8.15-16 北京威斯汀·全球产品经理大 会 PM-Summit,3000+ AI 产品人社群已就位。
直面 AI 落地难题、拆解头部案例、对接精准资源!

扫码登记信息,添加小助手进群,抢占 AI 产品下一波红利:

进群后,您将有机会得到:
· 最新、最值得关注的 AI 产品资讯及大咖洞见
· 独家视频及文章解读 AGI 时代的产品方法论及实战经验
· 不定期赠送 AI 产品干货资料和秘籍

Mojo 正在被 Python 调用

据开发者 Vincent D. Warmerdam 的实测,Python 调用 Mojo 现在变得非常简单,详细步骤如下。

首先,可以直接用 uv 安装:

uv pip install modular --index-url https://dl.modular.com/public/nightly/python/simple/

然后你可以创建一个 .mojo 文件,导出一个计算阶乘的函数 factorial(),内容如下:

# mojo_module.mojo
from python import PythonObject
from python.bindings import PythonModuleBuilder
import math
from os import abort
@export
fn PyInit_mojo_module() -> PythonObject:
    try:
        var m = PythonModuleBuilder("mojo_module")
        m.def_function[factorial]("factorial", docstring="Compute n!")
        return m.finalize()
    except e:
        return abort[PythonObject](String("error creating Python Mojo module:", e))
fn factorial(py_obj: PythonObject) raises -> PythonObject:
    var n = Int(py_obj)
    var result = 1
    for i in range(1, n + 1):
        result *= i
    return result

然后你就可以在 Python 中加载它:

# main.py
import max.mojo.importer
import os
import sys
import time 
import math
sys.path.insert(0, "")
import mojo_module
start = time.time()
print(mojo_module.factorial(10))
end = time.time()
print(f"Time taken: {end - start} seconds for mojo")
start = time.time()
print(math.factorial(10))
end = time.time()
print(f"Time taken: {end - start} seconds for python")

运行结果如下:

3628800
Time taken: 3.0279159545898438e-05 seconds for mojo
3628800
Time taken: 5.0067901611328125e-06 seconds for python

一切运行正常。

问题显现

不过,在实测时,Vincent 也注意到了一些问题,对于 factorial(10) 这样的轻量计算,Mojo 与 Python 本身速度相差无几。但当输入扩大到 factorial(100) 时,Mojo 返回的结果却是错误的(输出为 0),而 Python 的结果则是正确的。

0
Time taken: 2.7894973754882812e-05 seconds for mojo
188267717688892609974376770249160085759540364871492425887598231508353156331613598866882932889495923133646405445930057740630161919341380597818883457558547055524326375565007131770880000000000000000000000000000000
Time taken: 9.298324584960938e-06 seconds for python

这可能是 Mojo 侧溢出的结果。文档也提到这整套系统还处于早期阶段,说明其数值系统尚不成熟。

另一个例子

考虑到上面的问题可能是溢出引起的,Vincent 又试了一个例子来看看能不能测出加速效果。这次是一个朴素的素数统计实现。Mojo 代码如下:

from python import PythonObject
from python.bindings import PythonModuleBuilder
import math
from os import abort
@export
fn PyInit_mojo_module() -> PythonObject:
    try:
        var m = PythonModuleBuilder("mojo_module")
        m.def_function[count_primes]("count_primes", docstring="Count primes up to n")
        return m.finalize()
    except e:
        return abort[PythonObject](String("error creating Python Mojo module:", e))
fn count_primes(py_obj: PythonObject) raises -> PythonObject:
    var n = Int(py_obj)
    var count: Int = 0
    for i in range(2, n + 1):
        var is_prime: Bool = True
        for j in range(2, i):
            if i % j == 0:
                is_prime = False
                break
        if is_prime:
            count += 1
    return count

对应的 Python 测试代码如下,此外 Vincent 还加了一个 NumPy 实现做对比:

import numpy as np
import max.mojo.importer
import os
import sys
import time 
import math
sys.path.insert(0, "")
import mojo_module
def count_primes(n):
    count = 0
    for i in range(2, n + 1):
        is_prime = True
        for j in range(2, i):
            if i % j == 0:
                is_prime = False
                break
        if is_prime:
            count += 1
    return count
def count_primes_numpy(n):
    if n < 2:
        return 0
    candidates = np.arange(2, n + 1)
    is_prime_mask = np.ones(len(candidates), dtype=bool)
    for idx, candidate in enumerate(candidates):
        if candidate == 2:
            continue
        divisors = np.arange(2, candidate)
        has_divisor = np.any(candidate % divisors == 0)
        if has_divisor:
            is_prime_mask[idx] = False
    return np.sum(is_prime_mask)
n = 20_000
start = time.time()
print(count_primes(n))
end = time.time()
print(f"Time taken: {end - start} seconds for python")
start = time.time()
print(count_primes_numpy(n))
end = time.time()
print(f"Time taken: {end - start} seconds for numpy")
start = time.time()
print(mojo_module.count_primes(n))
end = time.time()
print(f"Time taken: {end - start} seconds for mojo")

运行结果如下:

  • Python 原生实现耗时:约 0.45 秒

  • NumPy 实现耗时:约 0.26 秒

  • Mojo 实现耗时:仅 0.01 秒


2262
Time taken: 0.44585609436035156 seconds for python
2262
Time taken: 0.25995898246765137 seconds for numpy
2262
Time taken: 0.011101961135864258 seconds for mojo

尽管这一 benchmark 并非最优算法,但结果仍然具备参考价值:在这种纯 CPU 密集型的计算任务中,Mojo 的性能提升确实相当明显,尤其是与 NumPy 相比也有数量级上的优势。

整体而言,通过实测,Vincent 发现,Mojo 的语法风格延续了 Python 的简洁性,同时具备编译语言的性能与类型系统。

不过,Mojo 当前仍处于早期阶段。文档覆盖不全、标准库功能有限、整套开发体验尚不稳定……这也意味着距离“生产可用”还有距离。

但从 Modular 的近期动作可以看出,该团队正在有意识地为 Python 社区打造“融合路径”——不是简单地“替代 Python”,而是围绕其生态做加速和增强。这种“拥抱兼容”的姿态或许更务实,也更容易获得社区的接纳。

对此,Vincent 评价道,「现在还不能称得上“生产可用”,但我已经更有信心了 —— 梦想确实正在靠近。」

原文:https://koaning.io/posts/giving-mojo-a-spin/

2025 全球产品经理大会

8 月 15–16 日

北京·威斯汀酒店

2025 全球产品经理大会将汇聚互联网大厂、AI 创业公司、ToB/ToC 实战一线的产品人,围绕产品设计、用户体验、增长运营、智能落地等核心议题,展开 12 大专题分享,洞察趋势、拆解路径、对话未来。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
国家统计局:2025年GDP增长5%!全国人均可支配收入43377元,同比增长5%

国家统计局:2025年GDP增长5%!全国人均可支配收入43377元,同比增长5%

每日经济新闻
2026-02-28 10:59:40
黎明前的惊雷:一个时代的落幕与中东秩序的重塑

黎明前的惊雷:一个时代的落幕与中东秩序的重塑

高博新视野
2026-01-05 18:13:59
全国统一执行!3月1日起,公职人员戴上紧箍咒,老百姓迎来大便利

全国统一执行!3月1日起,公职人员戴上紧箍咒,老百姓迎来大便利

风笛悠扬声
2026-03-01 03:04:28
中美局势可能发生大反转,最先超过美国的竟不是经济

中美局势可能发生大反转,最先超过美国的竟不是经济

华人星光
2026-01-07 13:32:47
网传张禹珍询问裁判退赛是否有积分后未果,随后离场治疗

网传张禹珍询问裁判退赛是否有积分后未果,随后离场治疗

懂球帝
2026-02-28 16:06:22
女子假信佛与多位高僧发生不当关系,秘密录制5600段视频。

女子假信佛与多位高僧发生不当关系,秘密录制5600段视频。

特约前排观众
2026-02-09 00:05:05
张禹珍0-4王楚钦,赛后认知比结果更重要

张禹珍0-4王楚钦,赛后认知比结果更重要

两兄弟养牛
2026-02-28 18:43:04
“七十不添衣,八十不祝寿”,这句话指的是啥?看完后涨知识了

“七十不添衣,八十不祝寿”,这句话指的是啥?看完后涨知识了

阿龙美食记
2026-02-26 14:30:14
国外媒体称:一旦战火爆发,中国将会到达无人知晓的地步

国外媒体称:一旦战火爆发,中国将会到达无人知晓的地步

古事寻踪记
2025-12-10 07:11:27
史无前例的封杀令:特朗普拉黑 3800 亿 AI 巨头,Anthropic 遭全网“断供”

史无前例的封杀令:特朗普拉黑 3800 亿 AI 巨头,Anthropic 遭全网“断供”

钛媒体APP
2026-02-28 11:09:22
中朝边境鸭绿江口现状:朝鲜领土正在不断增加,中方却在逐渐减少

中朝边境鸭绿江口现状:朝鲜领土正在不断增加,中方却在逐渐减少

普览
2026-02-26 21:29:19
养伤23天!皇马6000万前锋回归:18场仅1球 主力沦为替补

养伤23天!皇马6000万前锋回归:18场仅1球 主力沦为替补

叶青足球世界
2026-02-28 19:28:16
伊朗还能参加世界杯吗?或被美国拒绝入境!国足肯定无缘递补

伊朗还能参加世界杯吗?或被美国拒绝入境!国足肯定无缘递补

念洲
2026-02-28 17:25:27
人可以狠心到什么程度?看网友讲述,发现我真做不到这般绝

人可以狠心到什么程度?看网友讲述,发现我真做不到这般绝

侃神评故事
2026-02-27 07:40:03
“100%椰子水”到底有几分真?四款产品送检均疑似加水加糖

“100%椰子水”到底有几分真?四款产品送检均疑似加水加糖

闪电新闻
2026-02-28 17:31:36
妲己豪门男友染脏病的瓜?

妲己豪门男友染脏病的瓜?

香港内地文娱
2026-02-27 18:22:41
战争打响,伊朗唯一活路是把一万枚导弹当成“一次性打火机”!

战争打响,伊朗唯一活路是把一万枚导弹当成“一次性打火机”!

百态人间
2026-01-29 15:41:40
外媒:中国球迷畅想中国队取代伊朗队参加世界杯可能

外媒:中国球迷畅想中国队取代伊朗队参加世界杯可能

星耀国际足坛
2026-02-28 22:34:32
中国卫星直播美军F-22中东部署,五角大楼紧急开会商议

中国卫星直播美军F-22中东部署,五角大楼紧急开会商议

恋人视角
2026-03-01 03:41:36
伊朗公布战果

伊朗公布战果

新浪财经
2026-02-28 22:01:12
2026-03-01 05:51:00
CSDN incentive-icons
CSDN
成就一亿技术人
26345文章数 242235关注度
往期回顾 全部

科技要闻

狂揽1100亿美元!OpenAI再创融资神话

头条要闻

以官员称哈梅内伊身亡 遗体在其官邸废墟中被找到

头条要闻

以官员称哈梅内伊身亡 遗体在其官邸废墟中被找到

体育要闻

球队主力全报销?顶风摆烂演都不演了

娱乐要闻

周杰伦儿子正面照曝光,与父亲好像

财经要闻

冲突爆发 市场变天?

汽车要闻

岚图泰山黑武士版3月上市 搭载华为四激光智驾方案

态度原创

教育
亲子
房产
数码
本地

教育要闻

又看了一遍…觉得这册子真的太牛了…

亲子要闻

婴儿吃的“洋”辅食,九成靠代工贴牌?涉及上市公司

房产要闻

滨江九小也来了!集齐海侨北+哈罗、寰岛...江东教育要炸了!

数码要闻

小米超薄充电宝亮相MWC,98g有多能打?

本地新闻

津南好·四时总相宜

无障碍浏览 进入关怀版