1
klesh 2018-12-13 00:39:16 +08:00 via Android
线程不安全? GIL 了解一下?难道你用的不是 cpython?
|
3
silkriver 2018-12-13 09:00:00 +08:00
用 async/await 保证线程安全
|
6
lolizeppelin 2018-12-13 10:28:51 +08:00
python 这种不能用多核的渣渣 压缩不想办法 fork 到其他进程里干 你想卡死当前进程么
再说了 python 性能这么烂 需要经常压缩的话直接 shell 执行是性能最好的, 条件允许能不用 native 代码去压缩就不要用 python 去压文件 |
8
richzhu 2018-12-13 11:17:21 +08:00 via iPhone
@lolizeppelin 是有多烂,是准备写航空母舰吗
|
9
silkriver 2018-12-13 12:59:34 +08:00
Python 当然能用多核,开多进程就可以了,GIL 只是说一个进程内开多线程不能用多核
|
10
neoblackcap 2018-12-13 13:35:44 +08:00
@miniyao zipfile 不是很了解,但是你的 celery 不是默认多进程吗?有什么问题,将异常信息写上来。标题一句话,内容全靠猜?
|
11
hotea 2018-12-13 13:45:55 +08:00
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 17:05:00 +08:00
|
14
lolizeppelin 2018-12-13 17:23:04 +08:00
|
16
myyou 2018-12-13 18:46:05 +08:00
是不是开的线程太多,导致一次打开的文件 io 太多超过了系统的 net.core.somaxconn 的大小?
|