问题描述
假设有一个银行类, 其有存钱和取钱两种方法, 现在想让这两个方法在两个进程中实现.
该问题有如下特征:
1. 同一个对象的两个方法在两个进程中分别实现.
2. 两个方法之间有数据交互, 一个方法用来产生数据, 另一个方法用来读取数据.
方案设计
为了能够将对象的两个方法在两个进程中实现, 我先创建一个对象, 将对象的两个方法分别创建两个multiprocessing.Process.
为了能够让这两个方法之间能够进行数据通信, 该对象的内部必须有一个共享内存的机制.
我采用了multiprocessing.manager.BaseManager来自定义一个Manager, 它的存在保证了两个方法之间能够共享数据, 自定义的目的是为了自定义数据类型.
更本质的来讲, Manager本身是一个服务进程, 它存在的目的就是为了作为其他进程数据交互的媒介, 我们自定义这个进程就能够更加灵活的去应对复杂的进程间数据交互.
完整代码
from multiprocessing.managers import BaseManager
from multiprocessing import Process
import time
#自定义Manager, 该操作的目的是为了能够自定义共享内存的数据类型, 能够应对复杂的数据交互.
class moneyclass:
def __init__(self):
self.money = none
def save_money(self, money):
self.money = money
def take_money(self):
return self.money
class mymanager(basemanager):
pass
mymanager.register('money', moneyclas