[Python2.7] tornado多个子进程间的通信

新手上路,请多包涵

Python版本:2.7

现在需要利用tornado实现这个样子的一个功能:

1.利用tornado创建多个进程。
2.进程内写有 从数据库读取配置信息 的方法,读取出来的配置信息将会存储在进程中的一个A变量中。
3.进程内写有 根据配置信息做出对应的操作 的方法,其中配置信息是从A变量中取出的。
4.因为连接数据库比较耗时,所以将配置信息存在变量中,以供下次更快得获取配置信息。数据库中的配置信息会被修改(但频次不确定,有可能半天一次,有可能一天一次,所以不准备用定时任务同步配置信息),当其他服务修改完配置信息后会调用 从数据库读取配置信息 的接口方法。

目前遇到的问题:

假设有10个进程在跑,在其他服务修改完配置信息后,其发送的请求只有一次,只会被一个进程竞争到从而调用 从数据库读取配置信息 的方法,但是剩下的9个是不会调用该方法的。由于是利用多进程进行处理,所以每个进程的A变量是不同的,因此会造成一个进程的A变量存放的是半小时前的配置信息,但是另一个进程的A变量存放的是刚刚更新的配置信息。
有什么办法可以让每个进程的A变量都同步起来呢?

拟定的解决方案:

1.采用管道(Pipe)通信,在一个进程接收到 从数据库读取配置信息 的调用请求时,通过管道向其他进程发送消息,使他们都调用一次 从数据库读取配置信息 的方法。但是管道通信貌似是阻塞的,而且发出来的一次消息,被消费后就不存在的,也就是说只有一个进程可以收到这条通知。无效~
2.事件方式,灵感来自于ioloop.add_handler()。但是google了一下,貌似只有ioloop有这个方法,不知道可不可以对进程添加一个监听事件。

尝试了2天,没有好的解决方案,因此来这里求指点~
谢谢大家啦~~~

阅读 2.5k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏