2012-09-14 217 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作爲單例。