V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
推荐学习书目
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 · 3270 views
    This topic created in 2699 days ago, the information mentioned may be changed or developed.
    16 replies    2018-12-13 18:46:05 +08:00
    klesh
        1
    klesh  
       Dec 13, 2018 via Android
    线程不安全? GIL 了解一下?难道你用的不是 cpython?
    Trim21
        2
    Trim21  
       Dec 13, 2018
    @klesh GIL 并不保证 python 所有操作就是线程安全的...
    silkriver
        3
    silkriver  
       Dec 13, 2018
    用 async/await 保证线程安全
    klesh
        4
    klesh  
       Dec 13, 2018 via Android
    @Trim21 仔细看了一下,你说得对。谢谢
    klesh
        5
    klesh  
       Dec 13, 2018
    @Trim21 @miniyao python3.5 是做了什么吗?好像找不到相关资料?
    lolizeppelin
        6
    lolizeppelin  
       Dec 13, 2018
    python 这种不能用多核的渣渣 压缩不想办法 fork 到其他进程里干 你想卡死当前进程么

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

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

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

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