在我的wsgi.py启动挂钩中,我创建了一个队列对象,我需要将它传递给views模块。
# 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/urls.py中创建我的队列来做到这一点,但这是有问题的,因为它只会在对该应用程序的第一个http请求时运行。
任何人都知道最好的方法,或者我应该以完全不同的方式做到这一点。为简单起见,我想避免使用像rabbitmq / redis这样的专用队列。
答案 0 :(得分:1)
您在此处使用的Queue
是为所有线程由一个主进程管理时的通信而设计的:
Queue模块实现多生产者,多消费者队列。它 当信息必须时,在线程编程中特别有用 在多个线程之间安全地交换这个队列类 module实现了所有必需的锁定语义。这取决于 Python中线程支持的可用性;看到线程 模块。
当您进行Web开发时,情况并非如此。
您需要将队列流程与Web流程完全分开;你现在的方式我甚至无法想象它将来会引起多少问题。
您需要有三个独立的流程:
不要将这些结合起来。
然后您的视图可以访问队列而不必担心线程问题;并且您的员工也可以毫无问题地发布更新。
继续阅读celery,这是在django中轻松完成所有这些工作的事实标准方法。