2015-04-23 2 views
1

Я хочу использовать один сокет для подключения к MongoDB в многопоточном режиме.Как использовать только один сокет для подключения к MongoDB с pymongo 3?

#-*- 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() 

Код имеет только один разъем, а версия PyMongo - 2.2rc.

Citing the documentation for PyMongo 3:

добавлена ​​опция connect.

В start_request, in_request и end_request методы будут удалены, а также вариант auto_start_request.

Метод copy_database удален, см. copy_database examples для альтернатив.

Метод MongoClient.disconnect() удален; это был синоним для close().

client = pymongo.MongoClient("127.0.0.1", 27017, connect=False) 

булевой connect не работает.

ответ

2

Я хочу использовать один разъем для подключения к MongoDB в многопоточном режиме.

В PyMongo 3 пройдите maxPoolSize = 1. Все потоки приложений будут совместно использовать один сокет.

Boolean connect не работает.

Этот параметр определяет, когда PyMongo делает свои первоначальные подключения к серверу. Если установлено значение «Истина» (по умолчанию), он пытается немедленно подключиться. Если False, он пытается подключиться, когда приложение пытается выполнить операцию. Обратите внимание, что в PyMongo 3 соединение выполняется в фоновом потоке.

Смежные вопросы