gpt4 book ai didi

python - Django 如何调试查询集对象上的卡住保存操作

转载 作者:行者123 更新时间:2023-12-03 21:53:08 25 4
gpt4 key购买 nike

我在 Django 项目中有以下代码(在 Django Rest Framework 序列化程序的 create 方法中)

def create(self, validated_data):
<...>
log.info("\n\n\n")
log.info(f"django model: {self.Meta.model}")
log.info("CREATING CASE NOW .....")
case = self.Meta.model(**kwargs)
log.info(f"Case to be saved: {case}")
case.save()
log.info(f"Case object Created: {case}")

当我发布到端点时,它只是完全卡住在 .save() 上。这是示例输出:
2020-06-15 02:47:46,008 - serializers - INFO ===> django model: <class 'citator.models.InternalCase'>
2020-06-15 02:47:46,008 - serializers - INFO ===> django model: <class 'citator.models.InternalCase'>
2020-06-15 02:47:46,009 - serializers - INFO ===> CREATING CASE NOW .....
2020-06-15 02:47:46,009 - serializers - INFO ===> CREATING CASE NOW .....
2020-06-15 02:47:46,010 - serializers - INFO ===> Case to be saved: seychelles8698
2020-06-15 02:47:46,010 - serializers - INFO ===> Case to be saved: seychelles8698

不会抛出任何错误并且连接没有中断。我该如何调试?有没有办法从 save 方法中获取日志记录?

最佳答案

该错误可能与使用 Django rest 序列化程序无关,因为挂起简单的代码会创建一个新模型并保存它。现在你没有指定如何kwargs已定义,但最有可能的候选对象是它在与 DB 交谈时卡住了。
要调试代码,您应该学习如何单步调试代码。根据您的喜好,有多种选择。
视觉工作室代码
安装 debugpy包裹。
运行 python3 -m debugpy --listen localhost:12345 --pid <pid_of_django_process>运行“Python:远程连接”命令。
命令行界面
行前case.save()

import pdb; pdb.set_trace()
这假设您以交互方式运行 Django 服务器,而不是例如通过枪炮。您将在保存行之前获得一个调试控制台。当控制台出现时,输入“c”并按回车键继续执行。然后在进程出现卡住时按 Ctrl+C。类型 bt找出过程中发生了什么。
native 代码
如果堆栈跟踪指向 native 代码,您可以切换到 gdb .要调试它(确保退出任何 Python 调试器或在没有调试器的情况下重新启动进程)。跑
gdb -p <pid_of_django>
当进程出现卡住时。然后输入“bt”并按回车键以获取正在发生的事情的 native 回溯。这应该可以帮助您识别例如数据库客户行动起来。

关于python - Django 如何调试查询集对象上的卡住保存操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62379876/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com