测试环境: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个子进程中的实例是一样的。
本文探讨了在Flask应用结合Gunicorn部署环境下,单例模式的表现及原因。通过具体代码示例,展示了在多进程worker下,单例模式如何在子进程中共享同一实例,而与master进程实例独立。揭示了子进程继承父进程资源的特性。
396

被折叠的 条评论
为什么被折叠?



