我有一个多线程应用程序,定期获取MySQL表的全部内容(使用SELECT * FROM查询)。该应用程序是用Python编写的,使用线程模块进行多线程,并使用mysql-python(mysqldb)作为MySQL驱动程序(使用mysqlalchemy作为包装器会产生类似的结果)。我在MySQL数据库中使用InnoDB引擎。我编写了一个简单的测试来检查并发执行SELECT *查询的性能,并发现所有这些查询都是按顺序实现的。虽然明确将隔离级别设置为READ UNCOMMITTED,但似乎并没有提高性能。
下面是进行DB调用的代码片段:
@ performance.profile() def test_select_all_raw_sql(conn_pool, queue): ''' conn_pool - 从中获取mysql连接的连接池 queue - 任务队列 ''' query = '''SELECT * FROM table''' try: conn = conn_pool.connect() cursor = conn.cursor() cursor.execute("SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED") # 执行操作直至队列为空(抛出Queue.Empty) while True: id = queue.get_nowait() cursor.execute(query) result = cursor.fetchall() except Queue.Empty: pass finally: cursor.execute("SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ") conn.close()
我是否正确地期望此查询以并行方式执行?如果是,我该如何在Python中实现它?
下面是进行DB调用的代码片段:
@ performance.profile() def test_select_all_raw_sql(conn_pool, queue): ''' conn_pool - 从中获取mysql连接的连接池 queue - 任务队列 ''' query = '''SELECT * FROM table''' try: conn = conn_pool.connect() cursor = conn.cursor() cursor.execute("SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED") # 执行操作直至队列为空(抛出Queue.Empty) while True: id = queue.get_nowait() cursor.execute(query) result = cursor.fetchall() except Queue.Empty: pass finally: cursor.execute("SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ") conn.close()
我是否正确地期望此查询以并行方式执行?如果是,我该如何在Python中实现它?