这是一个业务场景。
首先在 Spring boot
中,有一个概念叫做 Spring IOC,通过注入,可以让某些类在整个项目周期有唯一实例。
多体现在数据库连接等。
目前,我 python
项目也有一个这样的场景。
redis
「封装了 redis
各种操作的类」 需要全局唯一实例
- 主线程创建 redis 实现类
redis
实现类可以传递给进程池中的进程,然后所有进程都使用一个实例
并且,除了 redis
还有可能创建 mysql
等。
在看这个值钱一定要看 python | 进程池、多进程共享自定义变量 BaseManager
其主要思路如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| from concurrent.futures.process import ProcessPoolExecutor from multiprocessing.managers import BaseManager
class A: def __init__(self): self.a = None self.prov()
def prov(self): self.a = 1
def test(self): self.a = self.a + 1 print(str(self.a))
class T: def __init__(self, c): self.test = None self.c = c self.proc()
def proc(self): self.test = A()
def test_a(self): self.test.test()
def proc(d): d["t"].test_a()
if __name__ == '__main__': b = BaseManager() b.register("T", T) b.start() t = b.T("123")
d = {} d["t"] = t process_pools = ProcessPoolExecutor(max_workers=4) for i in range(10): process_pools.submit(proc, d)
|