V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  ipwx  ›  全部回复第 70 页 / 共 200 页
回复总数  3991
1 ... 66  67  68  69  70  71  72  73  74  75 ... 200  
cow 正解。
2021-05-20 20:45:40 +08:00
回复了 huzhikuizainali 创建的主题 机器学习 机器学习的成果是否能生成一个打分器
> 更进一步,可以分别给出以上 9 项指标的得分,使我可以知道该商品为什么被分类为差。
说不定行,需要 representation learning,但这肯定是研究话题了。
2021-05-20 15:32:14 +08:00
回复了 LeeReamond 创建的主题 Python Python 的 gil 到底解决了什么具体的问题?
@neoblackcap 所以 “搞成 Java 那样是挺好的,JIT 性能提上去,C 扩展完全可以不用” 那就不是 Python 了。Python 最大的价值就在于搞成现在这样,可以无缝衔接各种 C/C++。高兴了我就把算法用 C++ 写一下,pybind11 直接嵌入 FastAPI 多好。。。
2021-05-20 15:30:35 +08:00
回复了 LeeReamond 创建的主题 Python Python 的 gil 到底解决了什么具体的问题?
@sagaxu All right,你说的大概是一堆用户要请求服务器的场景吧。Okay Okay,可以算 CPU 密集型。

我脑子里面 CPU 密集型的第一反应是跑一个 PageRank,跑一个 CNN 之类的……那点 IO 开销和模型本身比简直可以忽略不计,多进程是最好的选项。因而,Python GIL 在这种任务面前根本不是事情。

所以到底为啥人闲的蛋疼要用 Python 做 CPU 密集型的 Web 服务器啊,这不是找虐么。多学一门语言和生态不就好了。。。

@neoblackcap 不过份。参考上面这段,我认为 Python 在 CPU 密集型的 Web 服务器领域就毫无价值,而在科学计算 / 机器学习 / 数据处理方面才有价值。因此外部代码才是 Python 的重点,用 FastAPI 直接快速上线 PyTorch 模型或者包装一下手写的 C++ 模型,不香吗?在 C++ 里面写个 RestAPI 那是找虐啊!

所以同样的,优化掉 GIL 去适应 Web Application,为啥要找这方面虐呢?老老实实学习 Java / Go 不好吗?
2021-05-20 00:26:48 +08:00
回复了 xiaofami 创建的主题 Bash 初学者写了个 bash 脚本,求大佬点评
我承认我太菜,写不来 bash,所以我用 python
2021-05-19 23:33:44 +08:00
回复了 LeeReamond 创建的主题 Python Python 的 gil 到底解决了什么具体的问题?
@sagaxu 呃,我和你理解的 CPU 密集型是不是有点不一样。。。CPU 密集型,我理解就该多少核开多少线程,工作全部入队列,一个结果计算好就发出去。。。这种专门后台大量计算的场景吗? GIL 在 CPU 密集型,直接开多进程不就可以了。。。。

好吧我理解你的意思了,这种情况下你还想用多线程那 python 就没辙了。但是话说回来,这种场景多进程超好写啊。反而是 IO 密集型,当你的 IO 再上一个台阶,要用到多核多线程 + 每个线程 event loop,那搁多进程反而就有开销了。。。


@LeeReamond 对,我个人觉得,这是 GIL 非常重要的一点,对 C/C++ 扩展至关重要。其他什么引用计数、Python 内部解释器的各种乱七八糟问题,我觉着只要钱到位肯定都能给你搞出来。只有这一点,真的是牵扯到扔掉半壁江山的事情了。。。为了兼容性可能 python 会很有顾虑。你看 pypy 不是很多 C 扩展就不能用吗。


@neoblackcap ummm 我说的 vm 是相对于 c/c++ 原生代码的。你看 python byte code 不也是一种 vm 吗,有了这个 vm,python 才能做 tracing gc 啊。对 c/c++ native code,python 是真的 tracing 不起来啊。
2021-05-19 17:10:29 +08:00
回复了 LeeReamond 创建的主题 Python Python 的 gil 到底解决了什么具体的问题?
而且最基础的引用计数可以不枷锁实现,比如 c++ std::shared_ptr,用 atomic 原语就行。
2021-05-19 17:09:54 +08:00
回复了 LeeReamond 创建的主题 Python Python 的 gil 到底解决了什么具体的问题?
@junkun 引用计数我看不是大问题,但是 PyList_Append 这种操作可不是原子操作。随便一个线程切换就会让搞到一半的 Append 停下来,另一个线程操作同样的 List,然后就炸了。
2021-05-19 17:08:51 +08:00
回复了 LeeReamond 创建的主题 Python Python 的 gil 到底解决了什么具体的问题?
@sagaxu 这无所谓的啦,这种用词我不太在意的。这楼一直在说加锁的事情,那并发(单线程)不用加,但是 1C1T 并行(多线程)就得加。而且你得和他解释为啥 1C1T 这也算并行,有些人还觉得 1T1C 同一时间只有一个线程在跑,不算并行嘞。

所以我都不在意这些用词了。就怕半桶水只知道这种用词,而不知道背后到底具体是什么场景。
2021-05-19 09:47:44 +08:00
回复了 LeeReamond 创建的主题 Python Python 的 gil 到底解决了什么具体的问题?
@sagaxu 现代操作系统是时间片复用的并行操作系统。也就是说你一个线程比如 PyList_Append 做了一半,操作系统可能就会把这个线程停下来,换另一个线程去执行。因此 1C1T 也有并行,也要加锁。P.S. 这种停下来靠 CPU 硬件中断信号。
2021-05-18 22:54:26 +08:00
回复了 LeeReamond 创建的主题 Python Python 的 gil 到底解决了什么具体的问题?
@Jirajine yysy qs,解决 GIL 只能靠砍掉 C 模块,拥抱 JIT/VM 。但那就不是 Cython 应该做的事情了。
2021-05-18 22:00:09 +08:00
回复了 LeeReamond 创建的主题 Python Python 的 gil 到底解决了什么具体的问题?
@neoblackcap @LeeReamond

比如:

https://zhuanlan.zhihu.com/p/192974017

pybind11,C++ 与 python 互相调用的一个库。

你 C++ 可以有自己的 pthread 线程,甚至用上 uvloop 来做事件驱动,然后控制权可能又进入 python,然后又重新回到 c++。在 C++ 里面如果有多个 pthread native 线程,根本不归 python 管,同时去访问 PyList_Append,这就是 Python 无与伦比的自由度,也是它作为胶水语言的优势,但是也造成了 GIL 尾大不掉。
2021-05-18 21:56:21 +08:00
回复了 LeeReamond 创建的主题 Python Python 的 gil 到底解决了什么具体的问题?
@LeeReamond 或者你可以实现自己的一套引用计数(仿照 C++ std::shared_ptr,直接在你的 struct XXXObject 内部嵌入一个 Py_Object*,在你自己的引用计数清零的时候去调用 python api 清理掉这个 python 对象)。

换句话说,Python 变成了 API,C++ 才是本体。。。从 C/C++ 代码角度看就是这样。
2021-05-18 21:54:39 +08:00
回复了 LeeReamond 创建的主题 Python Python 的 gil 到底解决了什么具体的问题?
@neoblackcap 不,tracing gc 前提是有 vm 啊。

但是 python 在 c 扩展方面自由度太大了,根本做不了 vm 啊。。。
====


@LeeReamond 你理解错了,我指的不是 ctypes cffi 这种 C 扩展,而是直接在 C/C++ 项目里面 link python.dll ,主体是 C/C++ 的代码。你甚至可以在 C/C++ 里面直接 Py_ListAppend,或者调用某个对象的 __call__
2021-05-18 13:06:15 +08:00
回复了 LeeReamond 创建的主题 Python Python 的 gil 到底解决了什么具体的问题?
@LeeReamond ……接楼上。

如果 Python 一开始就决定没有 GIL,那么每个 C 扩展库作者必须知道每个版本的 Python 内部的操作是怎么回事,小心地去处理每一次和 Python 对象的打交道。这个心智负担就太重了。肯定不能完全依赖于 C 扩展库的作者。

Java/C# 因为有 VM 所以可以大大简化这里的问题,但是 Python 因为允许完全不受管理的 C 扩展所以。。。GIL 是当年和现在都最容易的选择,也是现在很难解决的问题。
2021-05-18 13:00:17 +08:00
回复了 LeeReamond 创建的主题 Python Python 的 gil 到底解决了什么具体的问题?
@LeeReamond 参见楼上 “如果 C 扩展要显式释放 GIL,那么该扩展就需要自行保证线程安全”
2021-05-18 01:24:26 +08:00
回复了 LeeReamond 创建的主题 Python Python 的 gil 到底解决了什么具体的问题?
…… 所以其实 Python 成也“胶水”败也“胶水”。C 扩展库能这么容易访问 Python 底层的东西是个优势,可以迅速做一些系统层面的 API 调用、融合 C/C++ 做科学计算( PyTorch,NumPy,或者 GPU 计算),或者在暴露 C/C++ 写的核心算法为 HTTP API 。但是同样的,这个优势也让 Python 在普通的多线程网络服务器上寸步难行。

我的看法是,Python 干好科学计算这方面的事情就行了。还有就是干好工具型胶水语言该做的事情,在性能无关的领域放光(比如运维)。科学计算本来就计算密集型,本来就要独占核心一直跑,根本不会有线程上下文切换。网络服务交给专业的,比如 Go,Java,C++ 什么的。多好。。。
2021-05-18 01:20:01 +08:00
回复了 LeeReamond 创建的主题 Python Python 的 gil 到底解决了什么具体的问题?
说的更明确一些:哪怕 C 扩展库对自己的逻辑进行了加锁,但是由于要访问 Python 对象,进一步使用 Python 解释器的东西,它防止不了外面的代码同时访问相同的对象,然后就崩溃了。。。

所以面对 C 扩展库,GIL 喊了这么长时间都搞不掉。
2021-05-18 01:12:24 +08:00
回复了 LeeReamond 创建的主题 Python Python 的 gil 到底解决了什么具体的问题?
1. Python 解释器层面的一些锁。这个其实想要优化总能优化的。
2. 保护 C 扩展模块,这方面是挺蛋疼的。

Python 生态半壁江山是 C 扩展库撑起来的,丢掉这部分江山等于自废武功。为了支持无锁而去掉 GIL 等于丢掉所有这些库,做网络应用的是爽了,但是 Python 就分裂了。
2021-05-17 22:19:07 +08:00
回复了 OkOObd 创建的主题 职场话题 如果在国内彻底躺平会怎么样?
lz 可能不知道,北京上海的平均工资不到 1 万,更别提中位数了
1 ... 66  67  68  69  70  71  72  73  74  75 ... 200  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   897 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 37ms · UTC 18:27 · PVG 02:27 · LAX 11:27 · JFK 14:27
Developed with CodeLauncher
♥ Do have faith in what you're doing.