1
klesh 2018 年 12 月 13 日 via Android
线程不安全? GIL 了解一下?难道你用的不是 cpython?
|
3
silkriver 2018 年 12 月 13 日
用 async/await 保证线程安全
|
6
lolizeppelin 2018 年 12 月 13 日
python 这种不能用多核的渣渣 压缩不想办法 fork 到其他进程里干 你想卡死当前进程么
再说了 python 性能这么烂 需要经常压缩的话直接 shell 执行是性能最好的, 条件允许能不用 native 代码去压缩就不要用 python 去压文件 |
8
richzhu 2018 年 12 月 13 日 via iPhone
@lolizeppelin 是有多烂,是准备写航空母舰吗
|
9
silkriver 2018 年 12 月 13 日
Python 当然能用多核,开多进程就可以了,GIL 只是说一个进程内开多线程不能用多核
|
10
neoblackcap 2018 年 12 月 13 日
@miniyao zipfile 不是很了解,但是你的 celery 不是默认多进程吗?有什么问题,将异常信息写上来。标题一句话,内容全靠猜?
|
11
hotea 2018 年 12 月 13 日
celery 有多个模式, prefork (default), eventlet, gevent or solo. 在默认 prefork 模式下开 worker 是多进程,资源都不共享,不存在线程安全问题吧?
|
12
miniyao OP @klesh
@Trim21 @silkriver @lolizeppelin @lolizeppelin @richzhu @silkriver @neoblackcap @hotea 参考大家的建议,本地也测试过,情况是这样的: 本地开发环境,单线程直接启动 celery 运行 zipfile 正常;生产环境是多 worker,这个任务里还有个 for 循环,只运行了第一个 loop 就熄火了。(所以整个任务是没有执行完成的,现在先用 thread 扛着在用,线上 celery 的故障还没有找出来) |
13
lolizeppelin 2018 年 12 月 13 日
|
14
lolizeppelin 2018 年 12 月 13 日
|
16
myyou 2018 年 12 月 13 日
是不是开的线程太多,导致一次打开的文件 io 太多超过了系统的 net.core.somaxconn 的大小?
|