PHP 跑 Python 比 Python 更快!

查看 163|回复 11
作者:mrpzx001   
原文
https://github.com/swoole/phpy/blob/main/docs/benchmark.md
压力测试
压测脚本中创建了一个 PyDict ,分别读写 PHP 代码和 Python 代码执行 1000 万次。
  • PHP 版本:PHP 8.2.3 (cli) (built: Mar 17 2023 15:06:57) (NTS)
  • Python 版本:Python 3.11.5
  • 操作系统:Ubuntu 20.04
  • GCC 版本:gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2)


    请注意设需要构造一个 1000 万个元素的 HashTable,需要至少 2G 以上内存空间才可以运行此测试

    PHP
    Python
    import time
    my_dict = {}
    COUNT = 10000000
    n = COUNT
    start_time = time.time()
    for i in range(n):
        my_dict["key-" + str(i)] = i * 3
    elapsed_time = time.time() - start_time
    print(f"dict set: {elapsed_time:.6f} seconds")
    n = COUNT
    total = 0
    start_time_get = time.time()
    for i in range(n):
        total += my_dict["key-" + str(i)]
    elapsed_time_get = time.time() - start_time_get
    print(f"dict get: {elapsed_time_get:.6f} seconds")
    PHP 数组
    结果对比
    (base) htf@swoole-12:~/workspace/python-php/docs/benchmark$ php dict.php
    dict set: 4.663758 seconds
    dict get: 3.980076 seconds
    (base) htf@swoole-12:~/workspace/python-php/docs/benchmark$ php array.php
    array set: 1.578963 seconds
    array get: 0.831129 seconds
    (base) htf@swoole-12:~/workspace/python-php/docs/benchmark$ python dict.py
    dict set: 5.321664 seconds
    dict get: 4.969081 seconds
    (base) htf@swoole-12:~/workspace/python-php/docs/benchmark$
    以 Python 测试为基准:
    [td]脚本名称[/td]
    [td]Set[/td]
    [td]Get[/td]
    dict.php
    114%
    125%
    array.php
    337%
    599%
  • phpy 以 PHP 代码写入 PyDict 的性能比原生 Python 高 14%,读取性能高 25%
  • PHP 写入 PHP Array 的性能比 Python 写入 Dict 高 237%,读取高出了近 500%

    其他
    phpy 这个项目已经进化到可以调用任何 python 内置常量、函数、模块,包括 print 、compile 、eval 、exec 等等,也就是说你完全可以用 php 的语法来写 python ,比如
    https://docs.python.org/zh-cn/3/library/ast.html#module-ast
    示例代码:print(ast.dump(ast.parse('x = 1'), indent=4))
    php 写法:
    $py = PyCore::import('builtins');
    $ast = PyCore::import('ast');
    $py->print($ast->dump($ast->parse('x = 1'), indent: 4));
    以上只是写着玩,phpy 的初衷是用 python 来弥补 php 生态上的不足,现在你可以用 php 来跑大模型了

    PHP, dict, Python, count

  • ersic   
    可是今天韩天峰刚说了,损耗在 50%左右
    mrpzx001
    OP
      
    @ersic 他昨天测试的时候用的是 debug 版的 php ,性能当然差了
    aogg   
    能不能用 python 的库,比如 gui 界面之类的,还有大模型的类库
    aogg   
    不能支持多线程的原理是什么
    lambdaq   
    凡事编程语言跑分,python 一看到 for 就直接宣布比赛结束了。
    lambdaq   
    另外
    my_dict["key-" + str(i)] = i * 3
    改成
    my_dict["key-%s"% i] = i * 3
    我这里会从 5.6 秒变 4.6 秒。
    lambdaq   
    换成 my_dict[b"key-%d"% i] = i * 3 变成 3.6 秒。
    结论:字符串是个体力活。
    mrpzx001
    OP
      
    @aogg 能,轻轻松松跑起来 chatglm3 ,gui 更不在话下了,可以看 example
    mrpzx001
    OP
      
    @aogg 不是不能,大佬没空而已,说不定哪天兴致来了就支持了
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部