Python—MySQL线程池
Posted ykyk
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python—MySQL线程池相关的知识,希望对你有一定的参考价值。
python实现版本:
#!/usr/python/bin/python3 # -*- coding:utf-8 -*- ############################ #File Name: mysql_threading_pool.py #Author: ykyk #Mail: [email protected] #Created Time: 2019-01-10 09:17:32 ############################ import logging import Queue import pymysql LOG = logging.getLogger(__name__) class ConnectionPool(object): def __init__(self. **kwargs): self.size = kwargs.get(‘size‘, 10) self.kwargs = kwargs self.conn_queue = Queue.Queue(maxsize=self.size) for i in range(self.size): self.conn_queue.put(self._create_new_conn()) def _create_new_conn(self): return pymysql.connect(host=self.kwargs.get(‘host‘, ‘127.0.0.1‘), user=self.kwargs.get(‘user‘), passwd=self.kwargs.get(‘password‘), port=self.kwargs.get(‘port‘) connect_timeout=5) def _put_conn(self, conn): self.conn_queue.put(conn) def _get_conn(self): conn = self.conn_queue.get() if conn is None: self._create_new_conn() return conn def exec_sql(self, sql): conn = self._get_conn() try: with conn as cur: cur.execute(sql) return cur.fetchall() except pymysql.ProgrammingError as e: LOG.error(‘execute sql {{0}} error {1}‘.format(sql, e)) raise e except pymysql.OperationalError as e: conn = self._create_new_conn() raise e finally: self._put_conn(conn) def __del__(self): try: while True: conn = self.conn_queue.get_nowait() if conn: conn.close() except Queue.Empty: pass
以上是关于Python—MySQL线程池的主要内容,如果未能解决你的问题,请参考以下文章