推荐学习书目
› Learn Python the Hard Way
Python Sites
› PyPI - Python Package Index
› http://diveintopython.org/toc/index.html
› Pocoo
值得关注的项目
› PyPy
› Celery
› Jinja2
› Read the Docs
› gevent
› pyenv
› virtualenv
› Stackless Python
› Beautiful Soup
› 结巴中文分词
› Green Unicorn
› Sentry
› Shovel
› Pyflakes
› pytest
Python 编程
› pep8 Checker
Styles
› PEP 8
› Google Python Style Guide
› Code Style from The Hitchhiker's Guide
miniyao
V2EX  ›  Python

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

  •  
  •   miniyao · Dec 12, 2018 via Android · 3625 views
    This topic created in 2885 days ago, the information mentioned may be changed or developed.
    16 replies  •  2018-12-13 18:46:05 +08:00
    klesh
    klesh
    Dec 13, 2018 via Android
    1
    线程不安全? GIL 了解一下?难道你用的不是 cpython?
    Trim21
    Trim21
    Dec 13, 2018
    2
    @klesh GIL 并不保证 python 所有操作就是线程安全的...
    silkriver
    silkriver
    Dec 13, 2018
    3
    用 async/await 保证线程安全
    klesh
    klesh
    Dec 13, 2018 via Android
    4
    @Trim21 仔细看了一下,你说得对。谢谢
    klesh
    klesh
    Dec 13, 2018
    5
    @Trim21 @miniyao python3.5 是做了什么吗?好像找不到相关资料?
    lolizeppelin
    lolizeppelin
    Dec 13, 2018
    6
    python 这种不能用多核的渣渣 压缩不想办法 fork 到其他进程里干 你想卡死当前进程么

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

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

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

    谁懂你代码里做了啥影响了进程
    brucedone
    brucedone
    Dec 13, 2018
    15
    @klesh 大神你好,你们公司还招人吗?我想给你打杂
    myyou
    myyou
    Dec 13, 2018
    16
    是不是开的线程太多,导致一次打开的文件 io 太多超过了系统的 net.core.somaxconn 的大小?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1537 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 17:55 · PVG 01:55 · LAX 09:55 · JFK 12:55
    ♥ Do have faith in what you're doing.