V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
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
18870715400
V2EX  ›  Python

关于 Python 的一个多线程的诡异的异常

  •  2
     
  •   18870715400 · 2020-09-15 22:08:08 +08:00 · 1512 次点击
    这是一个创建于 1524 天前的主题,其中的信息可能已经有所发展或是发生改变。

    代码的链接

    https://gist.github.com/GandalfLiu/bfa270cbd9dd0297e4c871f5cbb4c7fc

    错误异常,当同时执行的任务超过 3 个比如 4 个的时候, 这时候会发生在代码逻辑之外的错误

    当有四个任务加入队列中的时候, 如 1, 2, 3, 4
    前面 1 和 2 号任务正常执行, 产生对应的结果 1 和 结果 2
    但是第 3 个这时候会直接先产生 2 个错误结果,数据库中确认已经产生了, 
    然后执正常执行任务 4 并且产生结果, 然后又会再次去执行任务 3, 并且正常执行然后产生结果, 这时候就会有 6 个结果, 4 个成功的结果, 还有对应的任务 3 的两个失败结果
    
    
    诡异分析:
    1. 日志记录的挺详细的, 但是其中没有发现任务错误, 任务 3 会无缘无故的产生 2 个错误的结果, 但是里面找不到任何错误记录
    2. 按照正常情况, 任务 3 第一次失败了之后就应该更改对应的数据库的任务 status 为 2, 该任务就不会加入到队列中了, 但是实际情况后面还是会继续执行一次, 然后继续失败, 然后再执行一次然后成功, 然后执行的任务状态就被更改为 3 了.但是执行失败的情况找不到任何的失败日志记录, 数据库记录日志找不到任何错误.
    3. 当同时执行任务的次数小于 3 个的时候,正常逻辑运行, 就是超过 3 个出问题
    
    controller.py 文件和 logic.py 文件应该没有啥问题, 目测问题主要在多线程上面, 查了好几天, 有大神帮忙看看多线程的代码哪里出问题了么?
    
    5 条回复    2020-09-18 10:37:27 +08:00
    ruanimal
        1
    ruanimal  
       2020-09-16 10:00:25 +08:00
    try 和 finally 里面的代码块都会被执行,在没有出错的情况下。

    而且既然你 try 了,except 里面为啥不打日志。。 看日志就知道结果了啊
    ruanimal
        2
    ruanimal  
       2020-09-16 10:04:38 +08:00
    而且你这个代码每个人物都会建立一个数据库连接,任务多了数据库连接直接爆炸。

    ps: 感觉 lz 是写 java 出身的吧
    18870715400
        3
    18870715400  
    OP
       2020-09-16 17:29:44 +08:00
    @ruanimal 诡异的就是 except 里的日志都没有打印
    ruanimal
        4
    ruanimal  
       2020-09-16 17:57:43 +08:00
    @18870715400 你都没写打日志的代码,当然没日志啊
    18870715400
        5
    18870715400  
    OP
       2020-09-18 10:37:27 +08:00
    经过排查, 是因为多线程执行顺序混乱导致出现的问题
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1296 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 17:28 · PVG 01:28 · LAX 09:28 · JFK 12:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.