V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
assad
V2EX  ›  程序员

我对 Python 的困惑

  •  
  •   assad · 2017-07-25 09:11:34 +08:00 · 19438 次点击
    这是一个创建于 2713 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近关于 Python 成了最热门的语言的言论很多,我却很困惑。

    平时项目,我感觉用 PHP 就蛮好,很多项目都直接用了 PHP。 Python 以前我也写过一些 Web 项目,无奈性能太差,就是上了 PyPy,也没见提高到哪里去。而且也就那样了。

    再就是用 Python 写一些简单的服务,定时任务,脚本,以及监控任务,感觉还不错。

    机器学习和深度学习呢,感觉中小公司没几个能搞搞,至于 AI,更是那些大公司玩得起的。

    那么,Python 对于我们这些小公司呢,究竟能用来干些什么?写 Web,API 开发,PHP,Java 能比它做的更好;爬虫呢,又不是每个公司都需要,其他呢? AI 和深度学习我们又玩不起,那么为啥 Python 还这么火?大家都在用 Python 来干嘛呢?

    第 1 条附言  ·  2017-07-26 09:17:10 +08:00
    对不起大家,我就简单的提了一下性能问题。

    我的意思是,PHP 能很好的完成 Web 或者 API 接口项目,性能也还行。Python 就不知道该干嘛了,作为中小公司,除了监控,脚本,爬虫,还能搞些什么。

    并不是要挑起性能之争或者语言的优劣!
    160 条回复    2017-07-27 19:28:09 +08:00
    1  2  
    loopio
        101
    loopio  
       2017-07-25 20:30:55 +08:00 via Android
    自动化运维
    albertofwb
        102
    albertofwb  
       2017-07-25 20:45:08 +08:00 via Android
    @assad 兄台此言差矣。无论公司规模多小自动化运维还是很有必要的。
    albertofwb
        103
    albertofwb  
       2017-07-25 20:53:42 +08:00 via Android
    @xxxss 老哥稳。这是真爱
    jy01264313
        104
    jy01264313  
       2017-07-25 21:45:32 +08:00
    @bestkayle 那个框架是什么这么牛逼?
    我有点孤陋寡闻了,我所知道的一个纯 C 的 Web Server 框架
    lwan https://github.com/lpereira/lwan
    也没有这么厉害啊
    sagaxu
        105
    sagaxu  
       2017-07-25 21:52:41 +08:00   ❤️ 1
    @assad 回家用 i5-6500 测了一下,PHP-FPM 版本为 7.1,Python 版本为 3.6,QPS 如下
    PHP 裸跑不用框架,41K
    PHP + CI 直接 echo,11K
    PHP + CI 载入 view,10.3K

    nginx + uwsgi + flask, 17K
    tornado 裸跑 keepalive 10.5K
    tornado 裸跑 短连接 7.5K

    所有测试均为 500 并发,10 万个请求,0 个失败。
    gclove
        106
    gclove  
       2017-07-25 22:05:35 +08:00
    @sagaxu 有 pypy 吗
    BoBoy
        107
    BoBoy  
       2017-07-25 22:07:46 +08:00 via iPhone
    instagram 业务量是不是也没有你所谓的性能不行之说?我不信你公司有 instagram 一款 App 牛逼,手动斜眼。。
    gouchaoer
        109
    gouchaoer  
       2017-07-25 22:33:04 +08:00 via Android
    写运维我还是用 php,内容处理是 php 强项。。。至于爬虫,php 的基础设施也很好
    gouchaoer
        110
    gouchaoer  
       2017-07-25 22:36:27 +08:00 via Android
    hello world 的 qps 没用。。。。后台有 redis/mysql/rpc 的才有意义,连接池、异步等组件 php 生态完爆 py
    billlee
        111
    billlee  
       2017-07-25 22:51:24 +08:00
    @gouchaoer #110 php 搞连接池你要 C 扩展吧,python 要自己搞个连接池是分分钟的事。
    freefcw
        112
    freefcw  
       2017-07-25 23:00:13 +08:00
    @est 哈哈哈,看到一个老人出来吐槽了~~说起来,上 v2 都十多年了哎
    jpacg
        113
    jpacg  
       2017-07-25 23:07:47 +08:00
    @sagaxu 赞一个,没个 Python 几年开发经验,也敢评价 Python,搞的我都想开贴说明了。
    sagaxu
        114
    sagaxu  
       2017-07-25 23:11:12 +08:00
    @gclove pypy 也顺手测了一下

    nginx + uwsgi + flask, 31K
    tornado 裸跑 keepalive 48K
    tornado 裸跑 短连接 23K


    @gouchaoer python 连接池不需要扩展,拿 pure python 就能写了。异步从 py3.5 开始是语言特性,增加了 async/ await 关键字,asyncio 则是包含了协程的异步标准库。PHP 的异步生态,要等 swoole 替代 FPM 了,swoole2 的协程也不错,我司项目里有投入使用。
    cranelee13
        115
    cranelee13  
       2017-07-25 23:43:43 +08:00 via iPhone   ❤️ 1
    怪不得说 PHP 是最好的语言。
    gouchaoer
        116
    gouchaoer  
       2017-07-25 23:48:52 +08:00 via Android
    @sagaxu 我最近要把 mysql 一些数据定期备份到 hive,一开始为了交接方便用 py,毕竟大家都多少会点。。。在 centos7 上为了装个 py 的 aes 加密库和操作 hive 的 thrift 的客户端你不知道有多折腾,pip 打包的库依赖一团糟;装完用 mysqldb 取 mysql 结果发现返回 dict 丢失了字段顺序,好吧 hack,然后字符灾难继续 hack,写了半天非常不爽,怒换 php 三下五除二搞完。。。要知道我是先接触 python 几年后才玩的 php 的,我只能说 py 本来可以更好,可是自己弄了很多不好的东西;而 php 实在是太适用于内容处理了,简单的 array 和标准函数
    Allianzcortex
        117
    Allianzcortex  
       2017-07-26 00:28:15 +08:00
    @gouchaoer dict 是哈希的 key-value,本身这种结构就无法保证有序,Java 里的 HashMap 也是一样无序,Collections 里提供了 OrderedDict 来保证顺序。发现 Python 的 dict 无序后第一反应难道不应该是搜 "Python dict order"吗?列出的第一个不就是 SO 的回答吗 https://stackoverflow.com/questions/1867861/python-dictionary-how-to-keep-keys-values-in-same-order-as-declared。
    Allianzcortex
        118
    Allianzcortex  
       2017-07-26 00:33:30 +08:00   ❤️ 1
    最近压力也很大,我再说点:做技术最重要的还是解决问题,在这种情况下什么语言真的无关紧要。我也很难说喜欢 Java 读取个文件也要搞装饰器模式动辄五六行的代码,但 JVM 生态圈显然是逃不掉的,纠结语言的真的没有意义。因为知道一点技术就高己卑人,产生众人皆醉我独醒的优越感,是成长过程中的大忌。我也曾经沉迷其中,直到有人给我点出这一点我才觉得自己太过分了:-D
    sagaxu
        119
    sagaxu  
       2017-07-26 00:47:52 +08:00
    @gouchaoer

    python 的 aes 和 des 加解密我都用过,比 php 的 openssl_xxx 是要麻烦不少,第一次用也花了我半个小时有的。

    python 用 thrift 怎么折腾了?

    pip 的依赖关系不是会自动处理吗?如果是 C 扩展,你只要把它编译时用到的 lib 装上就行。难道 php 安装 C 扩展会更容易?

    作为先接触几年 python 的人,竟然也会吐槽 dict 的无序?编码问题不是只有新手会懵逼吗?


    我觉得问题就出在“毕竟大家都多少会点”,能写几行的人的确很多,可是真正掌握了基础的要少得多,
    我感觉好多人自以为懂 python,其实还没入门,我们某些同事写的 python 代码我都觉得没法看,只能删了重写。
    jarlyyn
        120
    jarlyyn  
       2017-07-26 00:50:25 +08:00
    @sagaxu

    用啥工具测的 qps?
    sagaxu
        121
    sagaxu  
       2017-07-26 00:56:55 +08:00
    @Allianzcortex Java 是抽象的太过复杂和灵活了,却没有提供一个简单的常用 API,所以才有 commons-*和 guava 的生存空间,提供了大量的一句话方法去做这些常见的事情。FileUtils 和 Files 就是解决 IO 这种过度设计问题的 lib 糖。
    Allianzcortex
        122
    Allianzcortex  
       2017-07-26 01:12:09 +08:00
    @sagaxu 我最近也用了 des,还好......用的是 pycrypto==2.6.1 这个版本
    嗯,Guava 是必备的啊
    msg7086
        123
    msg7086  
       2017-07-26 02:54:28 +08:00
    实际应用中轮不到测 hello world 性能的地方。要高速返回 hello world,为什么不用 nginx 的 echo 组件。
    同理对于大部分静态数据来说,缓存到 redis 再由 nginx-lua 直接喂给浏览器,这 qps 要高得多。
    hareandlion
        124
    hareandlion  
       2017-07-26 07:16:32 +08:00 via iPhone
    对于开发人员素质参差不齐的软件行业来说,永远不要用动态语言去考验人性,所以尽管觉得 python 不好吧……反正我是不会放弃 python 的 :D
    tairan2006
        125
    tairan2006  
       2017-07-26 07:30:35 +08:00 via Android
    @gouchaoer 笑喷了,自己蠢怪语言
    Mark24
        126
    Mark24  
       2017-07-26 08:59:04 +08:00
    这问题能争论一辈子。
    SoulSleep
        127
    SoulSleep  
       2017-07-26 09:00:34 +08:00
    @default7 做网站不涉及到计算

    你所说的计算是指哪方面?....
    default7
        128
    default7  
       2017-07-26 09:02:32 +08:00 via iPhone
    @SoulSleep 数据分析,中文语义分析,提取。
    xray888
        129
    xray888  
       2017-07-26 09:07:34 +08:00
    @gulangyu 我也是在暗中观察各位江湖大佬(逼王)如何讨论(撕逼)的
    tkisme
        130
    tkisme  
       2017-07-26 09:07:55 +08:00
    default7
        131
    default7  
       2017-07-26 09:08:40 +08:00 via iPhone
    拿 py 去做网站的人,真的挺可笑的。如果说处理变态的并发,更是轮不到 Python。强迫拿 Python 去做网站的人,就好比一定要拿 php 去做采集的人一样。语言是都是可以做的,但关键是哪个更适合做什么,而不是觉得这个预言好,就必须无所不能无所不包。
    holajamc
        132
    holajamc  
       2017-07-26 09:09:25 +08:00
    我说一个基友的情况吧,基友 cpp,他说可能写一个功能需要一天,但是找空指针需要 364 天

    于是他也开始写 python 了~
    assad
        133
    assad  
    OP
       2017-07-26 09:10:10 +08:00
    @albertofwb 是必要,主要看 CTO 或者技术负责人怎么想的啦
    assad
        134
    assad  
    OP
       2017-07-26 09:11:37 +08:00
    @sagaxu PHP 开启 opcache 了么?
    assad
        135
    assad  
    OP
       2017-07-26 09:13:20 +08:00
    @gouchaoer 基础性能就是个测试,当然,真正项目中遇到的问题会很多。
    assad
        136
    assad  
    OP
       2017-07-26 09:13:47 +08:00
    @jpacg 开个贴搞搞
    WildCat
        137
    WildCat  
       2017-07-26 09:15:28 +08:00
    @sagaxu 性能有个什么用?
    有句话说的好,性能是货币,用来交易其他东西的。

    比如我时薪 100+,用 Python/Ruby 做项目可能用 1 单位工时,其他语言 2+,肯定用工时低的啊,服务器成本才多少钱
    daryl
        138
    daryl  
       2017-07-26 09:19:54 +08:00
    这跟写代码的人有关系好么?我见过能用 Java 写撑不过 100QPS 的,还见过用 PHP 能撑上万 QPS 的,你说哪个性能好?
    bwangel
        139
    bwangel  
       2017-07-26 09:21:11 +08:00
    看了楼上一大圈黑 Python 的,感觉和我黑 NodeJS 一样。

    我折腾了几个月的 NodeJS,最后还是学不会啊,于是就变成了坚定的 NodeJS 黑,什么破语言,都设计的啥破语法,我还是撸我的 Python 去吧。哼 :/
    bwangel
        140
    bwangel  
       2017-07-26 09:22:09 +08:00
    凡是我学不会的,都不是好语言,都是语言有问题,哈哈哈。
    wizardoz
        141
    wizardoz  
       2017-07-26 09:22:22 +08:00
    说到简单,为啥我也用了多年 python 也觉得有大家说的那么简单?
    XIVN1987
        142
    XIVN1987  
       2017-07-26 09:29:06 +08:00
    @default7
    知乎、豆瓣、还有你现在用的 V2EX 都是 Python 开发的,,
    smallHao
        143
    smallHao  
       2017-07-26 09:48:40 +08:00
    @tkisme2013 总算有人提 japronto 了 这个会爆 php 菊花的
    kkhaike
        144
    kkhaike  
       2017-07-26 09:54:25 +08:00
    我觉得评价语言并不是它能用来做什么,而是你做什么的时候哪种语言最适合。
    assad
        145
    assad  
    OP
       2017-07-26 09:54:52 +08:00
    @smallHao japronto 基本上是 C 写的,所以其实是 C 的性能啦
    sagaxu
        146
    sagaxu  
       2017-07-26 09:54:53 +08:00 via Android
    @assad 不开 opcache 的测试毫无意义

    @WildCat 所以我学了很多种语言,每个地方选最节省我时间的用

    @default7 变态的并发难道用 php?

    @assad [python 能很好的完成 Web 或者 API 接口项目,性能也还行。PHP 就不知道该干嘛了。] 你发现没有,把 Python 和 PHP 互换,也说的通啊。


    楼主的问题其实可以改一下,改成会 PHP 的人再学个 Python 收益大不大。
    assad
        147
    assad  
    OP
       2017-07-26 09:58:52 +08:00
    @sagaxu 可是 Python 目前在国内的状况你也是知道的,人才很缺,很多公司不愿意全部使用 Python 技术栈的原因。
    国内基本上 Web 上还是 JAVA 和 PHP 当道。

    改成会 PHP 的人再学个 Python 收益大不大。这句话我赞成,我做 Python 其实也不短,主要是完成一些 PHP 不能做的项目。但是发现,自己的平时的工作,还是 PHP 居多,Python 居少,感觉白学了一样。

    在新公司,也不敢贸然把技术栈改为 Python 的。招人啊,发展啊,等,都会受到影响。
    default7
        148
    default7  
       2017-07-26 09:59:46 +08:00
    @XIVN1987 知乎、豆瓣、还有你现在用的 V2EX 都是 Python 开发的,,

    好像没有用 PHP 开发的网站一样。。。。感觉 V2EX 上的这群小孩子小朋友们太能撕了。就这个话题吵的不可开交。
    default7
        149
    default7  
       2017-07-26 10:03:35 +08:00
    来到 V2EX 真的觉得自己老了,小孩子们就是爱折腾。选择一个语言也叽叽喳喳半天,做程序员最重要的目的是什么?
    无非就是赚钱养活自己,别提什么理想 奋斗之类的,人们为什么去工作无非就是赚钱生存倍。这样太转牛角尖,太过于技术原教旨的处女座心态,十年之后只会后悔的,一场空,你永远赶不上技术的弄潮
    ID2333
        150
    ID2333  
       2017-07-26 10:07:19 +08:00
    前排导火线,后排炸药包准备。。
    lfmy
        151
    lfmy  
       2017-07-26 10:17:31 +08:00
    @xxxss 哈哈哈哈
    XIVN1987
        152
    XIVN1987  
       2017-07-26 10:25:51 +08:00
    @default7

    你说“拿 py 去做网站的人,真的挺可笑的”
    我说“知乎、豆瓣、还有你现在用的 V2EX 都是 Python 开发的”
    很显然我只是想说 Python 做 Web 不可笑,,

    你回“好像没有用 PHP 开发的网站一样”
    是什么意思??什么脑回路??
    我有说过“ PHP 开发 Web 很可笑”吗?
    我有说过“ Python 开发网站比 PHP 好”吗??
    sagaxu
        153
    sagaxu  
       2017-07-26 11:14:27 +08:00
    @assad 拉沟上海站搜了一下,15K-50K 之间的职位,PHP 有 250 个,Python 有 100 个,JAVA 已经超过 500 个上限了。从招聘职位看,基本上 Java 一家独大,PHP 和 Python 都是少数,我没有求职者数据,也没招过 Python 开发,但是感觉上 PHP 码农供应量比 Python 大不少,具体供求比如何,没法对比。从我了解的项目看,有 Python/PHP 转 Go 的,转 Java 的,但很少有 Python 和 PHP 之间互相转换的。与其纠结 Python 和 PHP,不如再多学个 Go 或者 Java,互补性更强。
    aljun
        154
    aljun  
       2017-07-26 13:27:04 +08:00
    @bestkayle 你看完他源码在这么说吧,生产环境敢这么用?
    aljun
        155
    aljun  
       2017-07-26 13:30:03 +08:00
    @jy01264313 因为那个 benchmark 就是胶了 C 的,把 c hack 了 http 请求,不快才有鬼,你可以看看源码
    wohenyingyu02
        156
    wohenyingyu02  
       2017-07-26 13:38:22 +08:00
    性能问题和怎么实现有关吧,和语言关系不大,即使语言提供的默认库性能不好,也可以自己实现一个性能好的
    KgM4gLtF0shViDH3
        157
    KgM4gLtF0shViDH3  
       2017-07-26 13:39:55 +08:00
    @aljun #154 这只针对 hello,world 说的。
    jy01264313
        158
    jy01264313  
       2017-07-26 14:03:58 +08:00
    @aljun 一个 Python 结合 C 的框架,比一个纯 C 的还牛逼这么多?
    xxxss
        159
    xxxss  
       2017-07-27 14:39:05 +08:00
    根据你的附言就再回答一下。
    你说的是“我们中小公司”,如果你是这家“ 中小公司”的老板或者技术负责人,那么你应该考虑的不是“ Python 能在我们中小公司做什么?”,而是“我们这家公司要做什么和要做这个事,适合用什么,怎么做”。
    因为作为一个中小公司,如何迅速成长才是企业应该关心的问题,因为如果利润率不高,发展速度不足,那么很可能这家公司都撑不过下面 5 年,那你还关心 Python 干嘛。而反过来,如果这家公司安于做个中小公司是因为有稳定的收入来源,那就是说明这个公司的核心竞争力是别的东西,比如可能是政府关系,可能是销售,总之肯定不是开发。那你用不用 Python,怎么用 Python 无所谓啊,从你的描述来看,你无非现在用到的也就是监控、脚本、爬虫。那说明本来也没有大量使用 Python,那就还这样就好咯,并没有什么不妥,难道是因为你看 Python 很火,所以非要多用点?我觉得这纯属有病。
    下面假设你不是老板和负责人,也不想像老板那样从公司发展层面考虑,那么你只能从自己的发展角度考虑,那么我假设你不是想一直待在这家公司,或者不想永远在没有发展的小公司混的,因为刚才说了,如果小公司如果一直是小公司,要么就很快死掉,要么就是有什么优势但肯定不在开发上。那么你迟早会离开,你希望自己离开的时候是去哪里?是找什么样的企业,未来如何发展?难道由于现在的公司是中小公司,你就准备一直只用 Python 干点监控、脚本、爬虫度日么?当然你肯定有别的安身立命的技能,那么既然你想提升自身价值,我想你考虑的问题可能就不是“ Python 能在我们中小公司做什么”,而是“我未来要做什么”

    那么还是回到 Python 上来,中小公司为啥会有用 Python 的? Python 不是中小公司的唯一选择,也不一定是最好选择,但是可以说,在某些场景下,还是一个不错的选择。简单方便易上手,杂事能干,小系统也能上,在创业初期验证原型未来再换也来得及。缺点有没有?有,很多,大家都提到了。但没有完全没缺点的方案,根据自己的情况权衡取舍。对于个人来说,如果你是菜鸟,那别太在意哪个火,赶紧提升能力,尤其是学习能力和解决问题的能力,这才是立于本行业的核心能力。至于你是用 Python 还是 Php 解决问题,who cares ?你会要求厨子只准用木铲子还是用铁铲子做菜,或者修理工用十字还是一字螺丝刀?最好是都有,该用哪个用哪个。。如果都能拧,那哪个顺手用哪个。

    当然如果你只是想当个普通的码农,用 php,java 和 python 做做应用系统,应付一下小公司日常工作。那继续。过得开心就好。
    ericgui
        160
    ericgui  
       2017-07-27 19:28:09 +08:00
    你什么网站,竟然涉及到性能问题了?那说明你网站的访问量还不错
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1024 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 19:33 · PVG 03:33 · LAX 11:33 · JFK 14:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.