吐槽 Python

2015-11-19 16:01:53 +08:00
 Damnever
我猜你们看到 **吐槽** 两个字就会进来的。。。

撸了个高仿 Ubuntu 不带参数的 ping 程序。这里: https://github.com/Damnever/dping

撸的过程中考虑到一个问题,就是计算丢失率的时候,如果发送了一个报文,发送的报文计数(就叫 transmitted )加一,接受到一个报文,接受到的报文计数(就叫 received )加一。如果发送了一个报文并且 transmitted 加一, 如果此时按下`Ctrl + C`,假设发完这个之后是一定能收到响应报文的,那么 received 就会比理论值少一,丢失率就变大。

当时就想 Python 是否能阻塞 SIGINT ,结果大失所望。。。最后我这种 C 语言学渣还得强行撸点 C 代码,反正是能用。。。 除了运行效率这种人人皆知在脚本语言中不算大槽点的问题, Python 终于让我失望了。。。
3323 次点击
所在节点    Python
33 条回复
Damnever
2015-11-19 16:49:30 +08:00
@jiang42 你还是没有 get 到
jiang42
2015-11-19 16:51:10 +08:00
@Damnever 我确实没有 get 到,你提供一个你的程序可以而我的程序不行的 testcase 呗
Damnever
2015-11-19 16:52:48 +08:00
@jiang42 这个跟信号安全可以扯上那么一丁点关系,你自己了解下吧
scenix
2015-11-19 17:01:04 +08:00
https://docs.python.org/3/library/signal.html 楼主我在这里看到有个 signal.sigpending()的函数,不知道你用不用的上。
clino
2015-11-19 17:01:58 +08:00
楼上 @9hills 说的是对的"最简单的办法难道不是直接丢弃最后一个报文的计数么。。 " 合理
因为你的程序已经终止,这最后一个报文你是没办法知道到底对不对的,所以不能计算最后这一个
Damnever
2015-11-19 17:03:55 +08:00
@scenix 好吧, Python 3 不是很了解,看来是时候抛弃 Python 2 了
scenix
2015-11-19 17:06:20 +08:00
@Damnever 我虽然也是 python2 用的多 不过看到大部分的库都支持 3 了 感觉 3 是未来啊
jiang42
2015-11-19 17:09:26 +08:00
@Damnever 有点懂了,不过在我看来实现你的需求不需要 block 。 Python 2 的文档里明确说明不支持 block 。 Python 3 提供 signal.pthread_sigmask 。我不知道你用的 Python 版本,不过是时候抛弃 2 了
Damnever
2015-11-19 17:13:04 +08:00
@jiang42 的确不需要,但是我想到了, Python 2 却不支持,还要自己动手,所以这是槽点
jiang42
2015-11-19 17:17:06 +08:00
@Damnever 其实,就是这样的。。。不然要 C API 干嘛。。。你可以提交 patch 啊,反正是开源的。。。我看了下,似乎 ruby 也不能 block 。。。
CRVV
2015-11-19 23:33:28 +08:00
确实看到吐槽就进来了,于是进来吐槽
1 、 A simple ping program written in Python
2 、费了这么大的劲,如果有个包在第 4 秒回来了,你这程序还是没把丢包率算对
3 、实现这个需求显然有简单得多的方法,上面也有人说了。你就非要搞这个 SIGINT ,于是成功地把简单的问题复杂化了
4 、有 Python3 不用,还 from __future __ import xxx , 明摆着自己给自己找麻烦
Damnever
2015-11-19 23:49:20 +08:00
@CRVV

感谢吐槽,首先,第一二点我同意;然后第三点我实际上也在吐槽我自己,学习阶段给自己挖点坑没什么不好,但不能知难而退;第四点,我是为了把 2 和 3 都给兼容了,你认为这种小程序还这样就是找麻烦,我也没辙。。。
CRVV
2015-11-20 08:50:36 +08:00
@Damnever
似乎有个误解,所以回一下
我写的 4 其实是对应 24 和 28 楼
但是我没写清楚...

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

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

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

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

© 2021 V2EX