2012-09-14 172 views
2

我知道有很多问题在这个主题上回答,但他们都没有工作。 在centos6.2上使用apache2.2,mod_wsgi 3.3,python 2.7.3django 1.4django启动代码只执行一次

我试过启动我的代码形式urls.py,它被执行随机数量的次数,并在启动完成后随机执行。接下来我尝试了使用中间件技巧Where to put Django startup code?,启动代码也是随机执行的次数(打印出一些调试消息,多次看到相同的消息)。

问题是,我希望有一个global TCP Client,连接并与TCP服务器通信。它应该只初始化一次,如果它随机创建新的实例,旧的连接将会丢失,销毁谁知道什么时候,并且该套接字可能会在操作系统内存不足时被销毁(不确定)。因此,我们的目标是拥有一个global TCP Client,由触发TCP客户端功能的所有功能(例如Connect/Disconnect/Send/Receive)使用。

是否有某种apache或mod_wsgi选项?我在Windows 7上运行相同的配置,一切正常。

+0

你真的*希望它只执行一次吗? Apache/mod_wsgi启动新进程时会发生什么?这是否也需要客户端的实例? –

+0

似乎这已经解决:http://stackoverflow.com/questions/6791911/execute-code-when-django-starts-once-only –

+0

不起作用。就像我说的,累两种方法:( – krizajb

回答

1

不得不修改Apache的httpd.conf与下列行: WSGIDaemonProcess site-1 threads=15

WSGIProcessGroup site-1

Basicly django的是在多个进程和线程运行。要使全局TCP客户端线程安全,锁定对象threading.Lock()很有帮助。以防万一,也创建TcpClient作为单例。