Python Django将对象传递给视图

Python Django将对象传递给视图,python,django,Python,Django,在我的wsgi.py启动钩子中,我创建了一个队列对象,需要将其传递给视图模块 # Create and start thread for euclid. q = queue.Queue() euclidThread = threading.Thread(target=startEuclidServer, kwargs={"msgq":q}) euclidThread.setDaemon(True) euclidThread.start() 队列用于我的“euclid”线程和django

在我的wsgi.py启动钩子中,我创建了一个队列对象,需要将其传递给视图模块

# Create and start thread for euclid.
q = queue.Queue()
euclidThread = threading.Thread(target=startEuclidServer,
    kwargs={"msgq":q})
euclidThread.setDaemon(True)
euclidThread.start()
队列用于我的“euclid”线程和django之间的通信。 我的django项目包含一个名为“monitor”的应用程序,我的视图需要能够访问启动时创建的队列

以前,我通过启动线程并在../monitor/url.py中创建队列来实现这一点,但这是有问题的,因为它只会在对该应用程序的第一个http请求时运行


任何人都知道最好的方法,或者我应该用一种完全不同的方法。为了简单起见,我希望避免使用rabbitmq/redis等专用队列。

您在此处使用的
队列
设计用于在所有线程由一个主进程管理时进行通信:

队列模块实现多生产者、多消费者队列。信息技术 在线程编程中,当信息必须 在多个线程之间安全地交换。此队列中的队列类 模块实现所有必需的锁定语义。这取决于 Python中线程支持的可用性;请参阅线程 模块

在进行web开发时,情况并非如此

您需要将队列进程与web进程完全分离;你现在这样做,我甚至无法想象将来会造成多少问题

您需要有三个独立的流程:

  • 启动队列的进程
  • 启动wsgi进程的进程,如果您处于开发模式,它可能类似于“runserver”;或uwsgi+supervisord+circus或类似项目
  • 将执行发布在队列上的作业的工作人员
  • 不要把这些结合起来

    然后,您的视图可以访问队列,而不必担心线程问题;您的员工也可以发布更新,而不会出现任何问题


    请阅读在django中,哪一种是轻松完成所有这些工作的实际标准方式。

    请用一个例子更新您的问题,说明您正在尝试做什么,我不清楚您的wsgi文件与您的视图有什么关系