2009-09-16 29 views
0

我在运行Django,并且创建了在Django运行时并行运行的线程。那些线程有时会运行外部进程,在等待外部输入时阻塞。当Django重新启动时,终止子线程?

当我重新启动Django时,那些在等待外部输入时阻塞的线程有时会在重新启动时持续存在,并且它们还会继续打开端口8080,因此Django无法重新启动。

如果我知道Django何时重新启动,我可以杀死这些线程。我怎么知道Django何时重新启动,以便我可以杀死这些线程(及其产生的)。

从django.utils.autoreload中不明显,其中任何钩子可能会告诉重新启动何时发生。

Django启动时是否有另一种杀死这些线程的方法?

感谢您的阅读。

Brian

回答

1

这是不容易的Python进程杀死自己的线程 - 就更难了(几乎不可能)杀另一进程中的线程,我怀疑后者是你的情况下......将“重启“大概是在不同的过程中发生的,所以这些线程或多或少超出了你的界限!

我的建议反而是“在时间防微杜渐”:当您创建这些线程,一定要设置其daemon属性True(见the docs - 这是在Python < = 2.5 setDaemon方法)。这样,当主线完成时,例如要在另一个进程中重新启动,整个进程(也应该自动将所有守护进程线程自动关闭!) - 也会如此 - -

+0

谢谢亚历克斯。自此我决定为此启动一个全新的非Django守护进程,因为它解决了一整套复杂性问题。我恐怕已经失去了尝试你的建议的能力,但我会听取你的意见并将其标记为答案。 ;) – 2009-09-16 04:11:01

0

你用什么来重新启动django?我会在该脚本中放入一些东西来查找套接字文件中的进程ID,并在启动django之前杀掉它们。

或者,您可能会非常沉重并且在您的django启动序列之前运行诸如'pkill -9 * django *'之类的东西。

相关问题