使用MySQL和Python并发读写(不同进程)的问题

时间:2011-03-03 01:36:06

标签: python mysql

我有两个并发进程:

1。)Writer - 定期将新行插入MySQL数据库(10-20行/秒)

2。)Reader - 从插入

的同一个表中读取

我注意到Reader进程在启动时似乎只看到了数据库的快照。找到此启动之前发生的插入,但之后发生的插入不是。如果我关闭Reader进程并重新启动它(但让Writer继续运行),它有时(但不总是)会看到更多数据,但似乎又得到了数据库的时间点视图。

我在每次插入后运行一个提交(下面的代码片段)。我调查了这是否是改变缓冲/池化的功能,但做了“设置@@ global.innodb_change_buffering = none;”没有效果。此外,如果我通过My​​SQL工作台进入,我可以查询Writer插入的最新数据。所以这似乎是如何设置Python / MySQL连接的函数。

我的环境是:

Windows 7

MySQL 5.5.9

Python 2.6.6 - EPD 6.3-1(32位)

MySQL python连接器

插入代码为:

    def insert(dbConnection, statement):
    cursor = dbConnection.cursor()
    cursor.execute(statement)   
    warnings = cursor.fetchwarnings()
    if warnings:
        print warnings
        rowid = []
    else:
        rowid = cursor.lastrowid
    cursor.close()
    dbConnection.commit()
    return rowid    

读者代码是:

def select(dbConnection, statement):
cursor = dbConnection.cursor()
cursor.execute(statement)   
warnings = cursor.fetchwarnings()
if warnings:
    print warnings
    values = []
else:
    values = np.asarray(cursor.fetchall())
cursor.close()
return values   

1 个答案:

答案 0 :(得分:1)

阅读方面是什么样的?

我敢打赌这是读取端隔离级别的问题。很可能您的读取连接正在获取隐式事务,默认的InnoDB隔离级别为:

Repeatable Read

尝试发出:

cursor.execute("SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED")

在阅读方面。