python多进程单例_【已解决】Python中用多进程process测试单例Singleton

折腾:

期间,对于之前的ThreadSafeSingleton,虽然多线程thread测试是OK的,但是对于gunicorn的多worker是无效的。

gunicorn的多worker,目前的理解,应该属于多进程process。

所以也想想办法Mac本地能去调试多进程的情况,看看ThreadSafeSingleton是否有效。

python multiple process singleton

好像是支持多thread?

-》用shared memory去在多线程之间共享数据:

而对于如果真是多个process之间数据无法共享单例,那么暂时就放弃这条路,

暂时不去考虑用:shared memory,mmap等其他方式实现了,暂时还是考虑用:

的办法。

此处,先还是去参考:

和:

创建多个process去测试看看再说

期间对于Process类,有哪些函数和属性,参考:

其中就有我要的:pid

"pid

Return the process ID. Before the process is spawned, this will be None."

以及:

"multiprocessing.current_process()

Return the Process object corresponding to the current process.

An analogue of threading.current_thread()."

【总结】

最后用代码:

log.info("========== test multiple process singleton ==========")

import multiprocessing

def singleProcessDo(cur_num):

log.info("———- singleProcessDo ———-")

cur_process = multiprocessing.current_process()

curProcessTTokenSingleton = MsTtsTokenSingleton()

log.info("curProcessTTokenSingleton=%s", curProcessTTokenSingleton)

log.info("[%d] name=%s, pid=%s, process=%s", cur_num, cur_process.name, cur_process.pid, cur_process)

max_process_num = 5

for idx in range(max_process_num):

cur_num = idx + 1

each_process_name = "P%s" % cur_num

cur_process = multiprocessing.Process(target=singleProcessDo, name=each_process_name, args=(cur_num, ))

log.info("[%d] name=%s, process=%s", cur_num, each_process_name, cur_process)

cur_process.start()

测试结果竟然是:

多Process进程中,对应的单例,也是工作的:

【后记】

但是gunicorn中的多个worker中单例,就是不工作的:还是会初始化多个实例的。

最终发现是另外的原因:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值