0

解决了,每个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()
4

1 回答 1

0

ultramysql 不允许您在同一个 mysql 连接上进行多个查询,它只是使其异步友好。因此,您需要为每个 greenlet 建立一个新的 mysql 连接,或者使用锁定原语来确保一次只有一个 greenlet 使用该连接。

于 2013-05-24T00:09:03.923 回答