Python3.5 之前的版本,因为不是线程安全, celery 无法执行 zipfile,有这个问题吗?

2018-12-12 23:28:50 +08:00
 miniyao
2703 次点击
所在节点    Python
16 条回复
klesh
2018-12-13 00:39:16 +08:00
线程不安全? GIL 了解一下?难道你用的不是 cpython?
Trim21
2018-12-13 07:03:14 +08:00
@klesh GIL 并不保证 python 所有操作就是线程安全的...
silkriver
2018-12-13 09:00:00 +08:00
用 async/await 保证线程安全
klesh
2018-12-13 09:06:30 +08:00
@Trim21 仔细看了一下,你说得对。谢谢
klesh
2018-12-13 09:46:57 +08:00
@Trim21 @miniyao python3.5 是做了什么吗?好像找不到相关资料?
lolizeppelin
2018-12-13 10:28:51 +08:00
python 这种不能用多核的渣渣 压缩不想办法 fork 到其他进程里干 你想卡死当前进程么

再说了 python 性能这么烂 需要经常压缩的话直接 shell 执行是性能最好的, 条件允许能不用 native 代码去压缩就不要用 python 去压文件
Trim21
2018-12-13 11:13:07 +08:00
@klesh #5 我也没找到, 不知道楼主为什么这么说...
richzhu
2018-12-13 11:17:21 +08:00
@lolizeppelin 是有多烂,是准备写航空母舰吗
silkriver
2018-12-13 12:59:34 +08:00
Python 当然能用多核,开多进程就可以了,GIL 只是说一个进程内开多线程不能用多核
neoblackcap
2018-12-13 13:35:44 +08:00
@miniyao zipfile 不是很了解,但是你的 celery 不是默认多进程吗?有什么问题,将异常信息写上来。标题一句话,内容全靠猜?
hotea
2018-12-13 13:45:55 +08:00
celery 有多个模式, prefork (default), eventlet, gevent or solo. 在默认 prefork 模式下开 worker 是多进程,资源都不共享,不存在线程安全问题吧?
miniyao
2018-12-13 15:05:51 +08:00
@klesh
@Trim21
@silkriver
@lolizeppelin
@lolizeppelin
@richzhu
@silkriver
@neoblackcap
@hotea

参考大家的建议,本地也测试过,情况是这样的:
本地开发环境,单线程直接启动 celery 运行 zipfile 正常;生产环境是多 worker,这个任务里还有个 for 循环,只运行了第一个 loop 就熄火了。(所以整个任务是没有执行完成的,现在先用 thread 扛着在用,线上 celery 的故障还没有找出来)
lolizeppelin
2018-12-13 17:05:00 +08:00
@richzhu

和航空母舰有毛线关系
压缩这频繁计算的频繁复制 buf 的
python 又不能用多核还跑到一个进程里
你这要么进程不干活了 要么压缩死慢
lolizeppelin
2018-12-13 17:23:04 +08:00
@miniyao
你不贴代码怎么帮你

谁懂你代码里做了啥影响了进程
brucedone
2018-12-13 17:43:57 +08:00
@klesh 大神你好,你们公司还招人吗?我想给你打杂
myyou
2018-12-13 18:46:05 +08:00
是不是开的线程太多,导致一次打开的文件 io 太多超过了系统的 net.core.somaxconn 的大小?

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

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

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

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

© 2021 V2EX