【发布时间】:2019-10-07 08:41:52
【问题描述】:
当运行 django-admin runserver 并同时执行多个 PATCH 请求时,我看到所有日志,但在调试时只执行了一个。
使用django-admin runserver --nothreading时问题消失了。
我正在使用 Pycharm 调试器,可能是因为 runserver 默认使用 多线程,所以当两个请求同时出现时,会创建第二个线程,而 Pycharm 看不到/调试。所以这就是为什么我无法调试它但我看到了日志。
但第二件事是补丁更新只有一个请求成功,我知道 django-admin runserver 不是针对生产但是否有任何 数据竞争条件?我曾尝试使用 django.db.transaction.atomic 但它没有做出任何改变?
我的初步结论是,如果我们考虑数据库更新,runserver 不是线程保存,所以如果测试多个更新请求,应该使用 --nothreading 标志。
如果有任何帮助/解释,我将不胜感激。
最好, 伊戈尔
附:我没有任何代码,因为我认为它在这里没有任何帮助:
【问题讨论】:
-
嗨@Alasdair,你是对的--nothreading 只是隐藏了我已经修改我的代码以使用 select_for_update 的问题,谢谢。如果你想请修改你的评论来回答,你解决了我的问题。
标签: django python-3.x multithreading