Python数据持久对象,用于线程之间的通信

时间:2016-07-23 17:23:00

标签: python django multithreading data-structures queue

如图here所示,我设置了一个由cherrypy wsgi服务器提供服务的python Django应用程序。该应用程序基本上是另一个IRC客户端。这是交易:我很可能需要为我需要建立的每个新服务器连接创建几个独立的机器人实例。我需要能够与每个机器人进行通信。一个建议的答案是使用multiprocessing.Queue。这个对象是持久的数据,允许我与机器人通信。但是,我需要所有机器人同时收听同一信号,例如停止。每个机器人都必须控制停止信号是否适合他。因此,我需要一个对象或一些其他方法,允许每个机器人在一个单独的守护程序线程中运行,以收听一堆信号。 cherrypy用于服务器范围消息的总线系统非常好,但在这里看起来有点过分,我不知道如何实现它。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

所以,事实证明我只是混淆了变量和对象。变量不能在一个模块中定义并导入到另一个模块中(a = foo,然后从另一个模块修改a并从第三个模块导入)。这可以通过列表,词汇和内容来实现。 解决方案:在每次机器人启动时(并尝试连接到给定服务器),创建一个队列,并在一个带有密钥的dict中为该服务器分配:昵称(在IRC上必须是唯一的)。每个机器人都有一个deamonic监听器,可以读取队列。其他模块导入dict,特定队列,在那里放置一个信号,由侦听器使用。 该系统运行良好。竖起大拇指。我在一个方面遇到了困难:每个机器人都有多个DCC连接,很难为每个连接分配数据而不会混淆它们。