V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  serial  ›  全部回复第 4 页 / 共 4 页
回复总数  76
1  2  3  4  
2016-08-02 11:46:53 +08:00
回复了 SlipStupig 创建的主题 Python 最近研究 python 的一个小失落
@GeekGao

Of cause. 异步仅仅是个编程范式。我所说的当然是非阻塞 IO ,重点是:

“ pymongo ( mongodb 客户端)、 pymysql ( mysql 客户端)、 docker-py ( docker 客户端)、 paramiko ( ssh 客户端)、...,它们都是基于 httplib 。他们不支持 Twisted 、 tornado 、 gevent 、 asyncio 。”

当你编写网络服务时,你访问数据库 mysql 、 mongodb 、 redis 、... 访问 docker 、访问 ssh 服务、... 你不得不停下进程,等待远程服务器的返回。因为 python 现有的这些客户端库不支持非阻塞 IO ,还包括 djiango 、 flask 、 requests 。

client ---> python server ---> mysql
client --->

当多个客户端请求进来时,你的 python 服务器去访问 mysql ,就立刻变成一个阻塞访问,排队问题立马显现。
2016-08-02 10:31:43 +08:00
回复了 geeti 创建的主题 程序员 nginx 的 log 里有几十行 404 是自己的 ip 发起的 request
你的静态文件都没有加相对主目录。

location ~ \.(html|txt)$ 中放上 root
2016-08-02 10:16:06 +08:00
回复了 SlipStupig 创建的主题 Python 最近研究 python 的一个小失落
@likuku

你要分清服务器和客户端的区别。一个关键字:“协议”。

现在最简单通用的可以说是“ JSON ”,我们可以拿这个举例。服务器产生`{"x": 1, "y": 1, "z": 1, "w": 10, "h": 10, "l": 10}`,这就是服务器产生的数据,再加上协议头,由客户端及其 UI 库负责显示任务。

客户端可以用 table 显示这个数据:
x y z w h l
1 1 1 10 10 10

也可以用 3D 立方体显示这个数据
----
/ / |
---/

到底怎么显示,完全取决于客户端的 UI 库和算法程序。
2016-08-02 10:11:51 +08:00
回复了 SlipStupig 创建的主题 Python 最近研究 python 的一个小失落
@FrankHB

有意思的是,客户怎么看到?从哪里看到?
2016-08-02 09:57:02 +08:00
回复了 zhongshaohua 创建的主题 Node.js 求推荐 node.js 入门书籍
2016-08-02 09:09:16 +08:00
回复了 SlipStupig 创建的主题 Python 最近研究 python 的一个小失落
@GeekGao

这一点很有意思,你说的很对, python 2 有很多异步非阻塞 IO 框架: Twisted 、 tornado 、 gevent 。 python 3 原生提供 asyncio 支持。然而,问题也就在这:

1. python 2 、 3 版本分化, Twisted 、 tornado 、 gevent 、 asyncio 互相分化,你在一个框架、库写的东西,无法移植到另一个。

2. Twisted 、 tornado 、 gevent 、 asyncio 实现非常不优雅,我想看看他们的文档中的 example 就知道了。

3. 最为关键的,我已经提到了: pymongo ( mongodb 客户端)、 pymysql ( mysql 客户端)、 docker-py ( docker 客户端)、 paramiko ( ssh 客户端)、...,它们都是基于 httplib 。他们不支持 Twisted 、 tornado 、 gevent 、 asyncio 。好吧,也许你说猴子补丁。但是,猴子补丁的问题已经很明显了:版本更新(我想不需要我解释了)。

4. 综上所述,如果你要拿 python 做网络服务,那么只有两种选择:( 1 )自己重写所有的非阻塞 IO 驱动,比如 Openstack (关键字:人力成本、学习成本 --- 然而产生的结果,在其他语言都是现有的)( 2 )放弃并发 IO ,选用 djiango 、 flask ,开多线程,成为一个小众服务 ------ 我得说,你这种程序只能是个小群体用户,高并发根本不存在

当然,你非要说,我就是没有并发要求。那么,用 python 自然是可以的。 wordpress 、 Discuz! 二次开发都产生了那么多个人博客, python 自然没问题。但是,我得说,这就是楼上所说的: toy 。
2016-08-02 08:45:13 +08:00
回复了 SlipStupig 创建的主题 Python 最近研究 python 的一个小失落
@PythonAnswer

> "你用 c 或者 java 或者 go 重写然后 python 再调用就是了"

问题来了。你用 c 或者 java 或者 go 写什么系统呢?

1. 文件系统? OK ,那么 python 做的仅仅是 shell 的作用,如我所说,运维脚本而已。

2. 网络系统? OK ,很抱歉,如我 35 楼所说, python 第三方库没有非阻塞 IO 支持,因此你做不了。

3. 分布式 IO ? OK , 2 你都做不了,这一点更别提了。

4. 数据建模? OK ,正如我所说,这是科研非专业程序员的 work ,对于你一个职业程序员,这会让你没有饭吃,除非你转行做科研。

另外一提,我现在就在跟搞科研的人合作 --- 地址探测。并且他们不仅需要数据分析、建模,还需要 3D 可视化。他们不只用 python ,还用 fortran 。
2016-08-02 08:41:03 +08:00
回复了 SlipStupig 创建的主题 Python 最近研究 python 的一个小失落
@aisk
> “我已经笑出腹肌了,“ nodejs 惯例显示在浏览器”是什么鬼?“ Linux 没有 GUI ”又是什么鬼?当然你非要扯 Linux 内核没 GUI 的话,那你这个强行装 X 我服。另外 nodejs 为何不需要图形处理库?人家 PHP 主要拿来做网站,还要来个 GD 来生成二维码呢。 ”

图形是由客户端来显示的, understand ?

至于二维码,我请问二维码在服务端是什么东西?就是二进制数据。你用什么显示? Unix terminal 。最基本的服务器、客户端常识都没有。

nodejs 是什么? fs 、 net 、 process --- Unix 系统库的 wrapper 。没事读点 Unix Linux 的常识。、

关键字 “ kernel ”、“ GNU/Linux ”、“ Glibc ”、“ distribute ”,先好好把这些基础常识搞懂了。写 python 写傻了?哥哥写 python 3 年, nodejs 5 年, C 7 年,你那点水平连入门都没有。
2016-08-02 08:35:22 +08:00
回复了 SlipStupig 创建的主题 Python 最近研究 python 的一个小失落
@aisk

先搞懂什么是 Linux ,菜鸟
2016-08-01 21:19:36 +08:00
回复了 123s 创建的主题 Node.js node.js 怎么没有处理图形的 api,为什么不引入 GD 库?
图形是显示在 GUI 平台上的。 Linux 都没有 GUI ,发行版都是提供自己的 GUI 库。 nodejs 惯例显示在浏览器,浏览器已经有 canvas 和 webgl 图形库了。
2016-08-01 21:11:40 +08:00
回复了 LiuXuFei 创建的主题 Python 用 flask 如何做配置不同的子站比较优雅?
从最基本的思想就是错误的。一旦作为站点,就应该算作一个独立的资源。一个资源中套其他资源,天长日久,你的代码完全没有可维护。

每个站点有一份代码拷贝,和一个独立的 conf 配置文件(该站点的 Ip 、 port 、...)。使用 Nginx 作为前端代理,接入后端的多个子站。

编写一个自动化脚本,部署各个子站。
2016-08-01 21:03:58 +08:00
回复了 SlipStupig 创建的主题 Python 最近研究 python 的一个小失落
@wizardforcel @kingmo888

Of cause. Python 甚至在某些方面取代了 R 语言。然而, matlab 和 R 是用来建模的,不是做应用的 (它们甚至连完整的编程语言特征都不具备)。

什么样的人在使用 matlab 和 R ? 科学研究领域。他们 80% 的知识是懂电路、生物、化学、..., 20% 的知识是懂 Python 、 matlab 、 R 。他们的任务就是用这些语言重现、测试自己的实验。

那么,问题是,你是打算成为这样的科研者,还是一个专职程序员?如果你,一个 80% 的知识是懂 Python 、 matlab 、 R , 20% 的知识是懂电路、生物、化学、...,那么毫无价值。

@mengzhuo “两个游戏逻辑服务的表示, Python 的理念是,不够就堆机器”

1. 你的“游戏逻辑服务”,多少用户?
2. 每秒并发请求能到多少?
3. 做过 benchmark 、压力测试吗?
4. 数据量能多少?玩过 TB 级别的数据存储吗?
5. 什么是阻塞 IO ?什么是非阻塞 IO ?用了哪一种?

@WhiteT

你可以举个 “那么多新兴互联网公司要选择 Python ” 的例子。 Twitter 把他们的业务从 ruby 切换到了 Scala ; Facebook 在他们那丑陋缓慢的 PHP 上做了 C++ 适配层(这当然花了并且还在花他们很多钱); Dropbox 正在把自己的分布式文件系统从 GO 切换到 Rust 。

---------------------------------------------------

如果你要做 Web service ,那么 3.5 asyncio 是个不错的选择,非阻塞 IO 的 wrapper 。然而,一个问题就是 Python 2/3 没有非阻塞 IO 的第三方库支持。 pymongo ( mongodb 客户端)、 pymysql ( mysql 客户端)、 docker-py ( docker 客户端)、 paramiko ( ssh 客户端)、...,它们都是基于 httplib ,没错,它们都是同步的!!!

这就表示,它们的并发 IO === 渣。

如果你想做非阻塞应用,为了高并发,你必须用 asyncio 或者其他非阻塞 IO 库,重写这些库。最典型的例子 --- Openstack 。

就我所知,非阻塞 IO 的流行语言和库:

* C --- libev libevent --- 代表作 Nginx
* Nim --- asyncdispatch --- 代表作
* Erlang --- stdlib --- 代表作 Whatsapp
* Java --- nio netty --- 代表作 Hadoop
* Golang --- stdlib --- 代表作 Docker
* JavaScript --- node.js --- 代表作 Joyent 云服务

至于文件系统,动态语言无法胜任, Java 也无法胜任,这是 C 、 C++、 D 、 Nim 、 Rust 这些系统语言的战场。
2016-08-01 09:10:14 +08:00
回复了 SlipStupig 创建的主题 Python 最近研究 python 的一个小失落
@kideny

我就拿图像识别来说吧, python 的库非常多,(甚至神经网络的库都一大堆)。其中很多都是某些科学领域,但是非专业程序员写的,因为 python 对编程的要求门槛低。

但是当要把这些图像识别之类的程序拿来做服务,商用的时候,都会转用 C/C++ 来重写。 python 只是数学家提供的一个算法描述,它的速度不适合应用。
2016-08-01 09:07:49 +08:00
回复了 SlipStupig 创建的主题 Python 最近研究 python 的一个小失落
@kideny

这不是喷,这叫事实。每个语言都有其位置和商业模式。 python 的位置和商业模式就是: perl shell 替代品的运维脚本、非专业程序员的数据师的建模脚本。其他, python 只是重在参与。
首先,你运维写代码是干什么的? 拼接 Shell 命令, 80% 都是字符串、正则表达式处理。你用 Java 来处理字符串? 运维写的程序速度快有个毛用,一旦程序运行起来,运维的程序就退出了。
2016-08-01 09:00:02 +08:00
回复了 SlipStupig 创建的主题 Python 最近研究 python 的一个小失落
python 就不要求速度了,如果你不会 Shell ,可以拿 python 做自动化脚本 --- 特别是处理正则表达式。其他方面, python 都能做,做的都很垃圾 --- CPU 计算慢, IO 并发低,特别是标准库写的特别差。
1  2  3  4  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1188 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 24ms · UTC 23:01 · PVG 07:01 · LAX 16:01 · JFK 19:01
Developed with CodeLauncher
♥ Do have faith in what you're doing.