【发布时间】:2012-11-09 12:53:43
【问题描述】:
已解决,每个greenlet应该有一个连接而不是共享同一个连接。
我想在 MySQL 数据库中插入大量数据。我使用gevent从互联网上下载数据,然后将数据插入MySQL。我发现 umysqldb 可以异步插入 MySQL。但是我收到以下错误:Mysql Error 0: Concurrent access in query method。
我的代码如下:
def insert_into_mysql(conn,cur,pid,user,time,content):
try:
value=[pid,user,time,content]
#print 'value is', value
print 'hi'
cur.execute('insert into post(id,user,time,content) values(%s,%s,%s,%s)',value)
print 'after execute'
conn.commit()
# except MySQLdb.Error,e:
except umysqldb.Error,e:
print "Mysql Error %d: %s" % (e.args[0], e.args[1])
insert_into_mysql 包含在download_content 中:
while len(ids_set) is not 0:
id = ids_set.pop()
print 'now id is', id
pool.spawn(download_content,conn,cur,int(id))
r.sadd('visited_ids',id)
pool.join()
【问题讨论】:
-
你可以给标准mysqldb驱动打补丁,它应该是异步的,也见github.com/esnme/ultramysql
-
umysqldb 是一个 MySQLdb 兼容的 Ultramysql 包装器。