eightqueen
V2EX  ›  问与答

python 的性能之低简直不能忍啊

  •  
  •   eightqueen · Nov 2, 2015 · 18785 views
    This topic created in 4023 days ago, the information mentioned may be changed or developed.
    参照 rabbitmq 官网 workqueue 模式分别用 java 和 python 实现了两个客户端,推 1000 条消息, java 花费 50ms , python 花费 3s , 60 倍啊。
    Supplement 1  ·  Nov 2, 2015
    import pika
    import sys
    import time
    
    connection = pika.BlockingConnection(pika.ConnectionParameters(
            host='localhost'))
    channel = connection.channel()
    
    channel.queue_declare(queue='task_queue', durable=True)
    
    message = '1'
    start = time.time()
    for i in range(1000):
        channel.basic_publish(exchange='',
                              routing_key='task_queue',
                              body=message,
                              properties=pika.BasicProperties(
                                 delivery_mode = 2, # make message persistent
                              ))
    end = time.time()
    print end - start
    connection.close()
    
    import java.util.Date;
    import java.util.concurrent.TimeoutException;
    
    import com.rabbitmq.client.Channel;
    import com.rabbitmq.client.Connection;
    import com.rabbitmq.client.ConnectionFactory;
    import com.rabbitmq.client.MessageProperties;
    
    public class Producer {
        private static final String TASK_QUEUE_NAME = "task_queue";
    
        public static void main(String[] argv) throws java.io.IOException, TimeoutException {
    
            ConnectionFactory factory = new ConnectionFactory();
            factory.setHost("localhost");
            Connection connection = factory.newConnection();
            Channel channel = connection.createChannel();
    
            channel.queueDeclare(TASK_QUEUE_NAME, true, false, false, null);
    
            String message = "1";
            long start = new Date().getTime();
            for(int i = 0; i < 1000; ++i) {
                channel.basicPublish( "", TASK_QUEUE_NAME, 
                        MessageProperties.PERSISTENT_TEXT_PLAIN,
                        message.getBytes());
            }
            long end = new Date().getTime();
            System.out.println(end - start);
            channel.close();
            connection.close();
        }      
    }
    
    Supplement 2  ·  Nov 2, 2015
    我又在 centos 服务器上测试了一下 python ( 2.6 ,本地 2.7 )版本,性能陡增,和 java 处于同一数量及,奇怪了。
    Supplement 3  ·  Nov 3, 2015
    终于找到问题所在了,我还是太菜,本机 pika 版本只有 0.9 ,升到 0.10 性能陡增,感谢给我提供帮助的诸位 v 友。
    68 replies  •  2015-11-03 18:25:20 +08:00
    c742435
    c742435
    Nov 2, 2015
    1
    你的 python 解释器是什么
    有很多高性能的解释器可以试试
    fengxiang
    fengxiang
    Nov 2, 2015 via Android
    2
    那就卸了蛇用 java 喽
    eightqueen
    eightqueen
    OP
    Nov 2, 2015
    3
    @c742435 我用的 mint 系统,就是预装的 python 喽,应该是 cpython 吧
    loading
    loading
    Nov 2, 2015 via Android
    4
    let's go.
    tabris17
    tabris17
    Nov 2, 2015
    5
    python 当然慢咯,一直如此啊

    即便是 pypy 和 JAVA 比也是慢的
    leavic
    leavic
    Nov 2, 2015❤️3
    6
    python 如果性能和 java 一样, java 早死了
    sujin190
    sujin190
    Nov 2, 2015
    7
    哈哈,当时用 python 写完再用 java 实现对比的时候一样感觉,但还是喜欢用 python , java 的啰嗦简直不能忍
    jjx
    jjx
    Nov 2, 2015
    8
    搞 python 的对这个已经麻木了
    ilotuo
    ilotuo
    Nov 2, 2015 via Android
    9
    关键代码没写到 cpp 里
    sunus
    sunus
    Nov 2, 2015
    10
    有可能是驱动的原因
    wy315700
    wy315700
    Nov 2, 2015
    11
    cpython 就是慢,然而 pypy 的内存占用太恐怖了
    Comdex
    Comdex
    Nov 2, 2015
    12
    go go go
    echo1937
    echo1937
    Nov 2, 2015
    13
    不存在一种语言吃天下,所以该用什么语言的时候用什么语言。

    不过你说的情况我怀疑是驱动的锅。
    xunyu
    xunyu
    Nov 2, 2015 via Android
    14
    可以试下 jython,
    tolbkni
    tolbkni
    Nov 2, 2015
    15
    试试换一个用 c 实现的 rabbitmq Python 库
    jjx
    jjx
    Nov 2, 2015
    16
    @xunyu

    jython 很多时候能同 cpython 持平就不错了, 别看带了个 j 字
    timonwong
    timonwong
    Nov 2, 2015
    17
    kombu + librabbitmq?

    pika 用默认的 blocking client 是超级慢,而且 bug 多。
    ChanneW
    ChanneW
    Nov 2, 2015
    18
    show 代码
    felixzhu
    felixzhu
    Nov 2, 2015
    19
    感觉你的这个场景应该不会有这么大差距,可否给个代码
    ipconfiger
    ipconfiger
    Nov 2, 2015
    20
    用 multiprocess 库 map 一下,起 100 个进程,很快就发完了
    HentaiMew
    HentaiMew
    Nov 2, 2015
    21
    py 性能若能跟 Java 比或者相提并论… 那它就是当之无愧的脚本之王了。。。
    你是没见过速度慢上百倍的功能实现…
    不过既然用 py 还在乎什么性能,就跟用 Java 还在乎什么内存一样 2333
    love
    love
    Nov 2, 2015
    22
    py 虽慢,但象这么慢应该是你的问题。
    virusdefender
    virusdefender
    Nov 2, 2015
    23
    要看应用场景了, Python 慢也可以写 c 语言补充部分实现。
    eightqueen
    eightqueen
    OP
    Nov 2, 2015
    24
    @ChanneW
    @felixzhu 代码已 append
    kmahyyg
    kmahyyg
    Nov 2, 2015
    25
    表示 py 已经很快了,毕竟它没有编译成机器码直接执行,而是边解析边执行

    速度和 java 一样的话, java 又臭又长的那些 classes 就可以去死了
    zoowii
    zoowii
    Nov 2, 2015
    26
    其实很多情况下可以忍的
    不能忍再单独考虑嘛
    shenqiu15
    shenqiu15
    Nov 2, 2015
    27
    撸主真的有 50ms 推送 1000 条消息的需求吗?
    Mark24
    Mark24
    Nov 2, 2015
    28
    速度和 Java 一样,你还能看到 Java ?
    yuelang85
    yuelang85
    Nov 2, 2015
    29
    py 确实比 java 慢。不过这个实验不太靠谱。

    首先有个用法错误, for i in range(1000)应该换成 for i in orange 。

    另外, py 里链接创建是 connection = pika.BlockingConnection(pika.ConnectionParameters ,这个库的这个方法效率如何?

    要比较语言性能,最好是不要用第三方库,纯粹做 数值运算一类的
    weyou
    weyou
    Nov 2, 2015
    30
    就这两段代码看不出 python 能比 java 慢多少,感觉是 pika 库的设计出问题了。
    eightqueen
    eightqueen
    OP
    Nov 2, 2015
    31
    @shenqiu15 有啊,消费者是另一个家伙用 java 写的,他要求的 qps 是 2000 ,我发送消息只有 300 ,差太远啊
    0987363
    0987363
    Nov 2, 2015
    32
    c 跟 go 表示 50ms 太慢
    situs
    situs
    Nov 2, 2015
    33
    1010 最快 你要写么?
    shenqiu15
    shenqiu15
    Nov 2, 2015
    34
    @eightqueen 那就不要用 python 喽,没有一种语言能适用于所有场景。
    eightqueen
    eightqueen
    OP
    Nov 2, 2015
    35
    @yuelang85 orange 是什么东西?网上都查不到。 pika 是 rabbitmq 官网推荐的,我没得选。
    hdjdcyl
    hdjdcyl
    Nov 2, 2015
    36
    PHP 是世界上最好的语言
    yahoo21cn
    yahoo21cn
    Nov 2, 2015
    37
    java 用到多个 cpu 了吧, python 需要用 multiprocess 才能启用多 cpu ,速度就基本一样了
    iptux
    iptux
    Nov 2, 2015 via Android
    38
    @yuelang85 看到 orange 笑了,原谅我笑点低 23333
    yuelang85
    yuelang85
    Nov 2, 2015
    39
    @eightqueen
    @iptux

    额,我都想不明白我怎么把 xrange 敲成了 orange
    eightqueen
    eightqueen
    OP
    Nov 2, 2015
    40
    @yuelang85 xrange 我测过,性能并没有提高,它是生成器,节约内存, 1000 条根本没关系。
    mengzhuo
    mengzhuo
    Nov 2, 2015
    41
    明显是 IO 型的程序,和语言几乎没啥关系, LZ 刚入行吧
    上 gevent 或者 py3 的 async ,我们看看哪个厉害
    mulog
    mulog
    Nov 2, 2015
    42
    没错 python 虽然是慢也不能什么锅都接啊。。
    别的不说我复制楼主你的代码也跑不出 3s 这种水平啊

    ➜ test_pyjava sudo rabbitmqctl list_queues
    Listing queues ...
    celery 0
    task_queue 3000
    ...done.
    ➜ test_pyjava py py.py
    0.0359241962433
    ➜ test_pyjava sudo rabbitmqctl list_queues
    Listing queues ...
    celery 0
    task_queue 4000
    ...done.
    ➜ test_pyjava py py.py
    0.0347700119019
    ➜ test_pyjava sudo rabbitmqctl list_queues
    Listing queues ...
    celery 0
    task_queue 5000
    ...done.
    clino
    clino
    Nov 2, 2015
    43
    我觉得完全可以优化到差距不大的水平
    for i in range(1000)
    这个改成 xrange 先
    marchon
    marchon
    Nov 2, 2015
    44
    41 楼说的才靠谱啊, io 型的任务肯定得用 gevent 之类
    eightqueen
    eightqueen
    OP
    Nov 2, 2015
    45
    @clino 改成 xrange 没用
    @mulog @mengzhuo 你们都同时用 java 和 python 测过吗?
    clino
    clino
    Nov 2, 2015
    46
    @eightqueen
    properties=pika.BasicProperties(
    delivery_mode = 2, # make message persistent
    )
    这个参数每次都是一样的吧?
    你在 for 外面生成一个对象,然后每次直接传这个参数进去看看
    geew
    geew
    Nov 2, 2015
    47
    这种月经帖也是够了啊 先不说代码优化方面的问题 你说一个脚本语言和编译型语言有可比性吗....
    eightqueen
    eightqueen
    OP
    Nov 2, 2015
    48
    @clino 结果一样
    clino
    clino
    Nov 2, 2015
    49
    @eightqueen 那我觉得效率低的部分应该在你调用的 rabbitmq 的 python 库里,先不要那么怪 python 语言本身
    lightening
    lightening
    Nov 2, 2015
    50
    你是 localhost 上 host 的 RabbitMQ 吗?
    我们用的 Ruby ,应该是比 Python 还慢的。但是我们一秒钟能 push 7000 条信息,还带 ack 的。
    mulog
    mulog
    Nov 2, 2015
    51
    @eightqueen 测给你看咯

    ➜ test_pyjava py py.py
    0.0353381633759
    ➜ test_pyjava java -cp 'rabbitmq-java-client-bin-3.5.6/*:.' Producer
    56
    ➜ test_pyjava py py.py
    0.0339579582214
    ➜ test_pyjava java -cp 'rabbitmq-java-client-bin-3.5.6/*:.' Producer
    56
    ➜ test_pyjava py py.py
    0.0334329605103
    ➜ test_pyjava java -cp 'rabbitmq-java-client-bin-3.5.6/*:.' Producer
    55

    都是你的代码 一行没改 rabbitmq 在本地跑

    python 2.7.6
    java version "1.7.0_76"
    eightqueen
    eightqueen
    OP
    Nov 2, 2015
    52
    @mulog 见鬼了,为什么你这里 python 比 java 还快?改了什么代码吧。
    harry890829
    harry890829
    Nov 2, 2015
    53
    @sujin190 java 都啰嗦啊……那我这种写 c/c++的怎么办……
    sujin190
    sujin190
    Nov 2, 2015
    54
    @harry890829 java 的啰嗦不在于语言语法,而在于各种设计模式什么的滥用,用个 java ,光配置文件就看得头大。。 c/c++也可以写的很简练啊
    harry890829
    harry890829
    Nov 2, 2015
    55
    @sujin190 恩 c/c++确实可以写的很简练,主要是什么都要自己写,毕竟也是挺麻烦的
    clino
    clino
    Nov 2, 2015
    56
    用 https://docs.python.org/2/library/profile.html 在你的两个环境下都分析一下看看
    imdoge
    imdoge
    Nov 2, 2015
    57
    为什么在 leetcode 里,看运行时间 JAVA 运行时间才是最慢的?
    ethego
    ethego
    Nov 2, 2015
    58
    ```
    zeno@go:~$ pypy test2.py
    0.135266065598
    zeno@go:~$ pypy test2.py
    0.0797960758209
    zeno@go:~$ pypy test2.py
    0.0784769058228
    zeno@go:~$ pypy test2.py
    0.0792558193207
    zeno@go:~$ pypy test2.py
    0.131166934967
    zeno@go:~$ pypy test2.py
    0.0794620513916
    zeno@go:~$ pypy test2.py
    0.078901052475
    zeno@go:~$ source venv/bin/activate
    (venv)zeno@go:~$ python test2.py
    0.0328559875488
    (venv)zeno@go:~$ python test2.py
    0.0401589870453
    (venv)zeno@go:~$ python test2.py
    0.0292019844055
    (venv)zeno@go:~$ python test2.py
    0.0398349761963
    (venv)zeno@go:~$
    ```
    imdoge
    imdoge
    Nov 2, 2015
    59
    @geew java 算是编译之后的解释型语言
    Zzzzzzzzz
    Zzzzzzzzz
    Nov 2, 2015❤️1
    60
    Jython 性能比 CPython 还烂。

    range 和 xrange 在 1000 这个级别体现不出性能差, 相反小数组比起迭代来说不定 range 还会快点。

    建议楼主 python 用多进程或者 gevent 的属于作弊, 毕竟顶楼那段 java 也没用 NIO 或者多线程。

    单纯 IO 操作 PyPy 和 CPython 性能没太大差别, 有些时候 PyPy 还更慢点, CPython 和 Java 在运算上可能差很大, 但是 IO 操作上差距不会太大, 顶楼这个测试以 IO 为主, 差距这么大太不正常了, 建议跑一下 profile 在其他方面找找原因。
    eightqueen
    eightqueen
    OP
    Nov 2, 2015
    61
    @Zzzzzzzzz 谢谢,终于遇到个明白人
    mengzhuo
    mengzhuo
    Nov 3, 2015 via iPhone
    62
    @eightqueen 刷 leetcode 你就知道了
    涉及遍历的 计算为主的
    一般 python 能 40ms 跑完 java 要 100ms 以上
    当然 c 是 0ms
    clino
    clino
    Nov 3, 2015
    63
    @mengzhuo 为什么 这种情况 python 比 java 还快
    mengzhuo
    mengzhuo
    Nov 3, 2015
    64
    @clino
    估计和计算运行时间的方法有关系。
    clino
    clino
    Nov 3, 2015
    65
    @eightqueen profile 分析过了吗? 我很好奇是什么导致了你本地那么慢的
    eightqueen
    eightqueen
    OP
    Nov 3, 2015
    66
    @clino
    0.0211880207062
    1497 function calls (1482 primitive calls) in 0.022 seconds

    Ordered by: standard name

    ncalls tottime percall cumtime percall filename:lineno(function)
    1 0.000 0.000 0.022 0.022 <string>:1(<module>)
    1 0.000 0.000 0.022 0.022 Producer.py:17(send)
    8 0.000 0.000 0.000 0.000 __init__.py:1130(debug)
    1 0.000 0.000 0.000 0.000 __init__.py:1142(info)
    9 0.000 0.000 0.000 0.000 __init__.py:1331(getEffectiveLevel)
    9 0.000 0.000 0.000 0.000 __init__.py:1345(isEnabledFor)
    1 0.000 0.000 0.000 0.000 _weakrefset.py:70(__contains__)
    1 0.000 0.000 0.000 0.000 abc.py:128(__instancecheck__)
    2 0.000 0.000 0.000 0.000 base_connection.py:141(_check_state_on_disconnect)
    1 0.000 0.000 0.000 0.000 base_connection.py:333(_handle_read)
    31 0.000 0.000 0.000 0.000 base_connection.py:354(_handle_write)
    2 0.000 0.000 0.000 0.000 base_connection.py:368(_init_connection_state)
    10 0.000 0.000 0.021 0.002 blocking_connection.py:1146(_send_method)
    1 0.000 0.000 0.001 0.001 blocking_connection.py:198(close)
    3 0.000 0.000 0.021 0.007 blocking_connection.py:234(process_data_events)
    3 0.000 0.000 0.000 0.000 blocking_connection.py:249(process_timeouts)
    10 0.000 0.000 0.021 0.002 blocking_connection.py:265(send_method)
    2 0.000 0.000 0.000 0.000 blocking_connection.py:313(_adapter_disconnect)
    3 0.000 0.000 0.000 0.000 blocking_connection.py:330(_deadline_passed)
    3 0.000 0.000 0.021 0.007 blocking_connection.py:341(_handle_read)
    2 0.000 0.000 0.000 0.000 blocking_connection.py:364(_check_state_on_disconnect)
    34 0.000 0.000 0.000 0.000 blocking_connection.py:373(_flush_outbound)
    1 0.000 0.000 0.000 0.000 blocking_connection.py:382(_on_connection_closed)
    3 0.000 0.000 0.020 0.007 blocking_connection.py:39(inner)
    31 0.000 0.000 0.021 0.001 blocking_connection.py:409(_send_frame)
    10 0.000 0.000 0.021 0.002 blocking_connection.py:514(basic_publish)
    3 0.000 0.000 0.020 0.007 blocking_connection.py:77(ready)
    3 0.000 0.000 0.000 0.000 callback.py:114(add)
    64 0.000 0.000 0.000 0.000 callback.py:14(_name_or_value)
    1 0.000 0.000 0.000 0.000 callback.py:184(pending)
    1 0.000 0.000 0.000 0.000 callback.py:199(process)
    7 0.000 0.000 0.000 0.000 callback.py:235(remove)
    2 0.000 0.000 0.000 0.000 callback.py:281(_arguments_match)
    2 0.000 0.000 0.000 0.000 callback.py:302(_callback_dict)
    7 0.000 0.000 0.000 0.000 callback.py:320(_cleanup_callback_dict)
    1 0.000 0.000 0.000 0.000 callback.py:367(_should_process_callback)
    1 0.000 0.000 0.000 0.000 callback.py:384(_use_one_shot_callback)
    18/10 0.000 0.000 0.000 0.000 callback.py:47(wrapper)
    14/7 0.000 0.000 0.000 0.000 callback.py:70(wrapper)
    11 0.000 0.000 0.000 0.000 channel.py:566(is_open)
    2 0.000 0.000 0.000 0.000 connection.py:1029(_has_open_channels)
    1 0.000 0.000 0.000 0.000 connection.py:1039(_has_pending_callbacks)
    2 0.000 0.000 0.000 0.000 connection.py:1049(_init_connection_state)
    1 0.000 0.000 0.000 0.000 connection.py:1098(_is_connection_close_frame)
    1 0.000 0.000 0.000 0.000 connection.py:1109(_is_method_frame)
    1 0.000 0.000 0.000 0.000 connection.py:1272(_on_data_available)
    1 0.000 0.000 0.000 0.000 connection.py:1309(_process_callbacks)
    1 0.000 0.000 0.000 0.000 connection.py:1337(_process_frame)
    1 0.000 0.000 0.000 0.000 connection.py:1367(_read_frame)
    12 0.000 0.000 0.000 0.000 connection.py:1387(_remove_callback)
    4 0.000 0.000 0.000 0.000 connection.py:1397(_remove_callbacks)
    4 0.000 0.000 0.000 0.000 connection.py:1408(_remove_connection_callbacks)
    1 0.000 0.000 0.000 0.000 connection.py:1414(_rpc)
    1 0.000 0.000 0.000 0.000 connection.py:1441(_send_connection_close)
    31 0.000 0.000 0.001 0.000 connection.py:1475(_send_frame)
    11 0.000 0.000 0.021 0.002 connection.py:1494(_send_method)
    4 0.000 0.000 0.000 0.000 connection.py:1521(_set_connection_state)
    1 0.000 0.000 0.000 0.000 connection.py:1541(_trim_frame_buffer)
    33 0.000 0.000 0.000 0.000 connection.py:746(is_closed)
    2 0.000 0.000 0.000 0.000 connection.py:753(is_closing)
    5 0.000 0.000 0.000 0.000 connection.py:760(is_open)
    2 0.000 0.000 0.000 0.000 connection.py:841(_add_connection_start_callback)
    1 0.000 0.000 0.000 0.000 connection.py:852(_append_frame_buffer)
    1 0.000 0.000 0.000 0.000 connection.py:860(_buffer_size)
    1 0.000 0.000 0.000 0.000 connection.py:900(_close_channels)
    10 0.000 0.000 0.000 0.000 frame.py:118(__init__)
    10 0.000 0.000 0.000 0.000 frame.py:128(marshal)
    1 0.000 0.000 0.000 0.000 frame.py:192(decode_frame)
    32 0.000 0.000 0.000 0.000 frame.py:20(__init__)
    31 0.000 0.000 0.000 0.000 frame.py:30(_marshal)
    12 0.000 0.000 0.000 0.000 frame.py:58(__init__)
    11 0.000 0.000 0.000 0.000 frame.py:68(marshal)
    10 0.000 0.000 0.000 0.000 frame.py:86(__init__)
    10 0.000 0.000 0.000 0.000 frame.py:98(marshal)
    1 0.000 0.000 0.000 0.000 socket.py:192(close)
    31 0.000 0.000 0.000 0.000 socket.py:223(meth)
    10 0.000 0.000 0.000 0.000 spec.py:1792(__init__)
    10 0.000 0.000 0.000 0.000 spec.py:1828(encode)
    1 0.000 0.000 0.000 0.000 spec.py:2481(__init__)
    10 0.000 0.000 0.000 0.000 spec.py:2638(encode)
    1 0.000 0.000 0.000 0.000 spec.py:387(__init__)
    1 0.000 0.000 0.000 0.000 spec.py:414(encode)
    1 0.000 0.000 0.000 0.000 spec.py:431(__init__)
    1 0.000 0.000 0.000 0.000 spec.py:438(decode)
    1 0.000 0.000 0.000 0.000 utils.py:8(is_callable)
    116 0.000 0.000 0.000 0.000 {_struct.pack}
    1 0.000 0.000 0.000 0.000 {_struct.unpack_from}
    1 0.000 0.000 0.000 0.000 {_struct.unpack}
    2 0.000 0.000 0.000 0.000 {any}
    3 0.020 0.007 0.020 0.007 {built-in method poll}
    32 0.000 0.000 0.000 0.000 {chr}
    32 0.000 0.000 0.000 0.000 {getattr}
    169 0.000 0.000 0.000 0.000 {isinstance}
    64 0.000 0.000 0.000 0.000 {issubclass}
    164 0.000 0.000 0.000 0.000 {len}
    10 0.000 0.000 0.000 0.000 {math.ceil}
    31 0.000 0.000 0.000 0.000 {method 'append' of 'collections.deque' objects}
    89 0.000 0.000 0.000 0.000 {method 'append' of 'list' objects}
    1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
    21 0.000 0.000 0.000 0.000 {method 'insert' of 'list' objects}
    31 0.000 0.000 0.000 0.000 {method 'join' of 'str' objects}
    8 0.000 0.000 0.000 0.000 {method 'keys' of 'dict' objects}
    31 0.000 0.000 0.000 0.000 {method 'popleft' of 'collections.deque' objects}
    1 0.000 0.000 0.000 0.000 {method 'recv' of '_socket.socket' objects}
    31 0.000 0.000 0.000 0.000 {method 'sendall' of '_socket.socket' objects}
    10 0.000 0.000 0.000 0.000 {range}
    6 0.000 0.000 0.000 0.000 {setattr}
    5 0.000 0.000 0.000 0.000 {time.time}


    就是 pika 库的问题啊,时间全耗在它上面了,不过为什么只在我本机才会出现这种情况,感觉没法分析啊。
    clino
    clino
    Nov 3, 2015❤️1
    67
    @eightqueen 会不会两边用的 pika 库版本不一样?
    git clone 个最新的试试看
    eightqueen
    eightqueen
    OP
    Nov 3, 2015
    68
    @clino 大神,终于被你猜对了,我本机用的 pika0.9 ,其他机器用的 0.10 ,我把本机升到最新,立马有了质的飞跃,太感谢了。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   752 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 171ms · UTC 23:21 · PVG 07:21 · LAX 15:21 · JFK 18:21
    ♥ Do have faith in what you're doing.