【问题标题】:How to execute django startup code only once如何只执行一次django启动代码
【发布时间】:2021-08-11 16:57:30
【问题描述】:

我知道关于这个主题已经回答了很多问题,但没有一个有效。 在centos6.2 上使用apache2.2mod_wsgi 3.3python 2.7.3django 1.4

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

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

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

【问题讨论】:

  • 真的希望它只执行一次吗?当 Apache/mod_wsgi 启动一个新进程时会发生什么?那也不需要客户端实例吗?
  • 看来这已经解决了:stackoverflow.com/questions/6791911/…
  • 不起作用。就像我说的,这两种方法都很累:(

标签: django startup


【解决方案1】:

必须用以下几行修改 apache httpd.conf: WSGIDaemonProcess site-1 threads=15

WSGIProcessGroup site-1

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多