如何只执行一次Django启动代码 [英] How to execute django startup code only once
本文介绍了如何只执行一次Django启动代码的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我知道已经有很多关于这个话题的问题得到了回答,但都没有奏效。
在centos6.2
上使用apache2.2
、mod_wsgi 3.3
、python 2.7.3
和django 1.4
。
我尝试启动urls.py形式的代码,它被随机执行多次,并且在启动完成后随机执行。接下来,我尝试使用这里解释的中间件技巧Where to put Django startup code?启动代码也被随机执行了几次(打印出一些调试消息,多次看到相同的消息)。
问题是,我希望有一个global TCP Client
,连接并与TCP服务器通信。它应该只初始化一次,如果它随机创建新的实例,旧的连接将丢失,谁知道什么时候会被破坏,并且当操作系统耗尽内存时(不确定这一点),该套接字可能会被破坏。因此,我们的目标是拥有一个global TCP Client
,供触发Connect/Disconnect/Send/Receive
等TCP客户端函数的所有函数使用。
有没有针对此的某种apache或mod_wsgi
选项?我在Windows 7上运行相同的配置,一切正常,没有任何问题。
推荐答案
必须使用以下行修改ApacheHttpd.conf:
WSGIDaemonProcess site-1 threads=15
WSGIProcessGroup site-1
基本上Django在多个进程和线程中运行。为了确保全局TCP客户端线程的安全,锁定对象threading.Lock()
非常有用。我还将TcpClient创建为Singleton,以防万一。
这篇关于如何只执行一次Django启动代码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文