项目中有个应用,用到了多线程,线程中会有对MongoDB的操作。一般涉及到这种场景,都会小心MongoDB的连接的数量控制。
实现这个应用的时候必然已经考虑这点了,但实际碰到的情况是:多线程的程序运行起来,MongoDB连接数比预期多。
涉及的环境:
先用一段简化的代码来说明下这个问题。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#-*- encoding:UTF-8 -*- import threading import time import pymongo single_conn = pymongo.Connection('mongodb://127.0.0.1', max_pool_size=1) class SimpleExampleThread(threading.Thread): def run(self): print single_conn['fvck'].damnit.count(), self.getName() time.sleep(10) for i in range(100): SimpleExampleThread().start() |
代码的大致意思是创建1个MongoDB连接,然后生成100个线程,在线程中会有对MongoDB的操作
具体使用方式如下:
1 2 3 4 5 |
wget https://github.com/mongodb/mongo-python-driver/tarball/2.2rc1 tar xzvf 2.2rc1 cd mongodb-mongo-python-driver-4c7edfc/ sudo python setup.py install python test_pymongo.py |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#-*- encoding:UTF-8 -*- import datetime import threading import time import pymongo conn = pymongo.Connection('mongodb://127.0.0.1', auto_start_request=False) class MyThread(threading.Thread): def run(self): print conn['fvck'].damnit.count(), datetime.datetime.now(), self.getName() time.sleep(10) with conn.start_request(): for i in range(100): MyThread().start() |