def test_pool_with_fork(self): # Test that separate MongoClients have separate Pools, and that the # driver can create a new MongoClient after forking if sys.platform == "win32": raise SkipTest("Can't test forking on Windows") try: from multiprocessing import Process, Pipe except ImportError: raise SkipTest("No multiprocessing module") a = self.get_client(auto_start_request=False) a.pymongo_test.test.remove() a.pymongo_test.test.insert({'_id': 1}) a.pymongo_test.test.find_one() self.assertEqual(1, len(a._MongoClient__pool.sockets)) a_sock = one(a._MongoClient__pool.sockets) def loop(pipe): c = self.get_client(auto_start_request=False) self.assertEqual(1, len(c._MongoClient__pool.sockets)) c.pymongo_test.test.find_one() self.assertEqual(1, len(c._MongoClient__pool.sockets)) pipe.send(one(c._MongoClient__pool.sockets).sock.getsockname()) cp1, cc1 = Pipe() cp2, cc2 = Pipe() p1 = Process(target=loop, args=(cc1, )) p2 = Process(target=loop, args=(cc2, )) p1.start() p2.start() p1.join(1) p2.join(1) p1.terminate() p2.terminate() p1.join() p2.join() cc1.close() cc2.close() b_sock = cp1.recv() c_sock = cp2.recv() self.assertTrue(a_sock.sock.getsockname() != b_sock) self.assertTrue(a_sock.sock.getsockname() != c_sock) self.assertTrue(b_sock != c_sock) # a_sock, created by parent process, is still in the pool d_sock = a._MongoClient__pool.get_socket((a.host, a.port)) self.assertEqual(a_sock, d_sock) d_sock.close()
def test_pool_with_fork(self): # Test that separate MongoClients have separate Pools, and that the # driver can create a new MongoClient after forking if sys.platform == "win32": raise SkipTest("Can't test forking on Windows") try: from multiprocessing import Process, Pipe except ImportError: raise SkipTest("No multiprocessing module") a = self.get_client(auto_start_request=False) a.pymongo_test.test.remove() a.pymongo_test.test.insert({'_id':1}) a.pymongo_test.test.find_one() self.assertEqual(1, len(get_pool(a).sockets)) a_sock = one(get_pool(a).sockets) def loop(pipe): c = self.get_client(auto_start_request=False) self.assertEqual(1,len(get_pool(c).sockets)) c.pymongo_test.test.find_one() self.assertEqual(1,len(get_pool(c).sockets)) pipe.send(one(get_pool(c).sockets).sock.getsockname()) cp1, cc1 = Pipe() cp2, cc2 = Pipe() p1 = Process(target=loop, args=(cc1,)) p2 = Process(target=loop, args=(cc2,)) p1.start() p2.start() p1.join(1) p2.join(1) p1.terminate() p2.terminate() p1.join() p2.join() cc1.close() cc2.close() b_sock = cp1.recv() c_sock = cp2.recv() self.assertTrue(a_sock.sock.getsockname() != b_sock) self.assertTrue(a_sock.sock.getsockname() != c_sock) self.assertTrue(b_sock != c_sock) # a_sock, created by parent process, is still in the pool d_sock = get_pool(a).get_socket() self.assertEqual(a_sock, d_sock) d_sock.close()
def test_pool_with_fork(self): # Test that separate Connections have separate Pools, and that the # driver can create a new Connection after forking if sys.platform == "win32": raise SkipTest("Can't test forking on Windows") try: from multiprocessing import Process, Pipe except ImportError: raise SkipTest("No multiprocessing module") a = self.get_connection(auto_start_request=False) a.test.test.remove(safe=True) a.test.test.insert({'_id':1}, safe=True) a.test.test.find_one() self.assertEqual(1, len(a._Connection__pool.sockets)) a_sock = one(a._Connection__pool.sockets) def loop(pipe): c = self.get_connection(auto_start_request=False) self.assertEqual(1,len(c._Connection__pool.sockets)) c.test.test.find_one() self.assertEqual(1,len(c._Connection__pool.sockets)) pipe.send(one(c._Connection__pool.sockets).sock.getsockname()) cp1, cc1 = Pipe() cp2, cc2 = Pipe() p1 = Process(target=loop, args=(cc1,)) p2 = Process(target=loop, args=(cc2,)) p1.start() p2.start() p1.join(1) p2.join(1) p1.terminate() p2.terminate() p1.join() p2.join() cc1.close() cc2.close() b_sock = cp1.recv() c_sock = cp2.recv() self.assertTrue(a_sock.sock.getsockname() != b_sock) self.assertTrue(a_sock.sock.getsockname() != c_sock) self.assertTrue(b_sock != c_sock) self.assertEqual(a_sock, a._Connection__pool.get_socket((a.host, a.port)))
def loop(pipe): c = self.get_client(auto_start_request=False) self.assertEqual(1, len(c._MongoClient__pool.sockets)) c.pymongo_test.test.find_one() self.assertEqual(1, len(c._MongoClient__pool.sockets)) pipe.send(one(c._MongoClient__pool.sockets).sock.getsockname())
def loop(pipe): c = self.get_client(auto_start_request=False) self.assertEqual(1,len(get_pool(c).sockets)) c.pymongo_test.test.find_one() self.assertEqual(1,len(get_pool(c).sockets)) pipe.send(one(get_pool(c).sockets).sock.getsockname())
def loop(pipe): c = self.get_connection(auto_start_request=False) self.assertEqual(1,len(c._MongoClient__pool.sockets)) c.test.test.find_one() self.assertEqual(1,len(c._MongoClient__pool.sockets)) pipe.send(one(c._MongoClient__pool.sockets).sock.getsockname())
def loop(pipe): c = self.get_connection(auto_start_request=False) self.assertEqual(1, len(c._Connection__pool.sockets)) c.test.test.find_one() self.assertEqual(1, len(c._Connection__pool.sockets)) pipe.send(one(c._Connection__pool.sockets).sock.getsockname())