python 多进程共享数据库连接池_python 单例模式实现多线程共享连接池

我们经常使用数据库连接池,但那是有时候有些库并没有实现线程安全的连接池,这个时候,该如何自己封装?多进程和多线程甚至协程模式下,如何控制数据库连接数量或者是socket连接数。这个问题很有意义。

首先,多进程,通常的做法是每个进程实例化一个连接池,为什么不共享一个池,因为多进程和多线程同步的开销不一样,一般三方库都不会支持,但是redis 的库可以,他有些细节不一样。然后多线程共享,只需要将连接放到一个线程安全的容器,比如list 或者queue中。注意多线程和多进程的queue实现方式完全不一样,多线程是使用的mmap。

下面看看一个demo:

import multiprocessing

import threading

import os

def singleton(cls, *args, **kw):

instances = {}#

print "instance is",id(instances)

def _singleton():

#key = str(cls) + str(os.getpid())

key = str(cls)

if key not in instances:

instances[key] = cls(*args, **kw)

return instances[key]

return _singleton

print "instance has been free"

@singleton

class DB(object):

def _

你可能感兴趣的:(python,多进程共享数据库连接池)