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天,没有好的解决方案,因此来这里求指点~
谢谢大家啦~~~