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

2015-11-02 10:43:54 +08:00
 eightqueen
参照 rabbitmq 官网 workqueue 模式分别用 java 和 python 实现了两个客户端,推 1000 条消息, java 花费 50ms , python 花费 3s , 60 倍啊。
17468 次点击
所在节点    问与答
68 条回复
eightqueen
2015-11-02 22:27:51 +08:00
@Zzzzzzzzz 谢谢,终于遇到个明白人
mengzhuo
2015-11-03 09:13:27 +08:00
@eightqueen 刷 leetcode 你就知道了
涉及遍历的 计算为主的
一般 python 能 40ms 跑完 java 要 100ms 以上
当然 c 是 0ms
clino
2015-11-03 12:14:46 +08:00
@mengzhuo 为什么 这种情况 python 比 java 还快
mengzhuo
2015-11-03 14:09:44 +08:00
@clino
估计和计算运行时间的方法有关系。
clino
2015-11-03 15:00:58 +08:00
@eightqueen profile 分析过了吗? 我很好奇是什么导致了你本地那么慢的
eightqueen
2015-11-03 16:23:19 +08:00
@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
2015-11-03 17:06:06 +08:00
@eightqueen 会不会两边用的 pika 库版本不一样?
git clone 个最新的试试看
eightqueen
2015-11-03 18:25:20 +08:00
@clino 大神,终于被你猜对了,我本机用的 pika0.9 ,其他机器用的 0.10 ,我把本机升到最新,立马有了质的飞跃,太感谢了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/232846

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX