【发布时间】:2013-03-06 12:13:10
【问题描述】:
我有一个问题,我希望可以通过 Django 中的某种形式的关闭挂钩来解决。
我仍然是 Python/Django 开发的初学者,为了帮助学习,我为自己设置了一个项目,开发一个在浏览器中运行的 COMET/Reverse Ajax 风格的聊天网站。浏览器不断地轮询服务器以获取任何消息。当服务器收到轮询请求时,它会检查是否有任何消息在等待,如果没有,它会尝试获取一个已获取的 threading.Lock 对象上的锁.这会导致处理请求的线程阻塞,直到收到消息并释放前面提到的锁。
我的问题是在我关闭服务器时出现的。此时我正在使用开发服务器(python manage.py runserver)。如果上面解释的进程中有线程阻塞,则服务器不会关闭。
有没有一种方法可以在服务器尝试关闭时执行代码,以便我可以释放任何等待的线程?
我查看了以下similar question,但它对我没有帮助。有人猜测这样的事件挂钩不存在,但没有明确的答案。我用谷歌搜索了高低,但没有任何运气。
我正在使用 Python 2.7 和 Django 1.5。
感谢您提供的任何帮助
【问题讨论】:
-
不太确定这到底是如何实现的,以及它是否会起作用,但我只是把它放在那里 - 一条关闭消息,所有线程都会读取并理解为“哦,我应该可能会停止”?
-
@DJV :但我怎么知道要发送该消息?
-
不太确定,开发服务器的
Ctrl+C(又名KeyboardInterrupt)的某种句柄。对于不同的服务器,也许可以考虑不同的方法。我知道这不是一种通用方法,也不是通过 Django 完成的,但正如我所说的“我只是把它扔在那里”。