测试环境:flask + gunicorn
gunicorn配置:1个master 2个worker worker_class: sync
初始化falsk app的代码之后加入单例模式的代码:
class Single(object):
_instance = None
def __new__(cls, *args, **kwargs):
if not cls._instance:
cls._instance = type(cls, *args, **kwargs)
return cls._instance
import os
a = Single()
b = Single()
print("id(a):%s id(b):%s os.pid:%s" % (id(a), id(b), os.getpid()))
启动服务:
从图中可以看出,2个worker进程中的实例是一个,master进程中的实例的ID和worker进程中的实例ID不一致。猜测出现这样的原因是:子进程共享父进程的资源,所以2个子进程中的实例是一样的。