可以分享一下,当你遇到 python 多线程坑爹的时候的解决方案吗?

2016-01-13 14:20:19 +08:00
 VicYu

ok ,目前状况, Python2 ,都是 CPython 跑起的,也依赖了太多 CPython 包

库中,同步版本一切 OK
异步代码有 gevent 版本,但是许多三方包受不了 gevent 的 patch 纷纷跪掉,人力,时间又不够解决。结果就是在异步代码这方面就用 java 顶着, python 于是拥有了一个看着能用却用不了的版本。

之前想过的方案:

将众多 IO 放在一起开线程:异想天开了

concurrent.futures :看见源码导入 threading 包,有点怕怕

cython :但是没有找到哪里可以独立出计算的部分来用 c 改写

multiprocessing : multiprocessing.queue 又跪了

pypy : IO 问题

等等

3110 次点击
所在节点    Python
10 条回复
dai269619118
2016-01-13 14:39:55 +08:00
python 多进程确实有点坑 用着用着程序就莫名其妙的挂掉
后面只能去掉多线程,用异步来处理
ethego
2016-01-13 14:51:07 +08:00
你这怎么跪的又不详细说明一下,为什么怕 threading ?
ipconfiger
2016-01-13 14:59:46 +08:00
@dai269619118 用着用着程序就莫名其妙的挂掉 多半是自己程序报错挂掉了吧
VicYu
2016-01-13 15:11:47 +08:00
ethego
2016-01-13 15:23:23 +08:00
@VicYu 这么担心 GIL , multiprocessing 怎么跪的?看着更像程序的问题,不要啥事都怪解释器。
nooper
2016-01-13 15:26:39 +08:00
程序写的有问题,却怪 python 问题。有很多解决方案的。
ustslayer
2016-01-13 20:34:25 +08:00
IO 为主("IO-bound")的程序不一定要用 multi-threading , gevent / twisted / tornado 这样的 event-based 的实现是更好的选择。 gevent 的 greenlet 容易死的话,用 twisted / tornado 这种非 stackless 的、更为安全的库我相信是很好的解决方案。

CPU 为主("CPU-bound")的程序自然不应该用 CPython ,这种活当然是交给 C/C++ 甚至是 numba / OpenCL 来做了。
mengzhuo
2016-01-14 09:36:01 +08:00
自己并发基础弱还怪 python ……
你把代码拿出来让大家嘲笑和建议吧
VicYu
2016-01-14 14:10:28 +08:00
@ustslayer 谢谢
mikezhang0515
2016-01-26 17:30:08 +08:00
个人理解,有 io 就搞多线程,简单踏实,用 Python 就别考虑极限性能

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

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

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

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

© 2021 V2EX