2014-05-17 3 views
3

Я некоторый код, как этотPython MySQLdb db.commit() не работает

db = MySQLdb.connect(host="localhost", user="root", passwd="root", db="domains") 
cursor = db.cursor() 

def check_urls(res): 
    pool = Pool(25) 
    for row in res: 
     pool.spawn(fetch, row[0], row[1]) 
    pool.join() 

def fetch(*args): 
    """code trimmed for brevity""" 
    cursor.execute("""UPDATE com SET http_status=%s, is_checked=1 WHERE id=%s""", 
        (output.get('http_status', ""), id)) 


for _ in xrange(10000): 
    cursor.execute("SELECT domain, id FROM com WHERE is_checked IS NULL LIMIT 100") 
    result = cursor.fetchall() 
    check_urls(result) 
    db.commit() 


cursor.close() 
db.close() 

My program get stuck at db.commit(). В базе данных нет значений. Может кто-нибудь сказать мне, что случилось ?.

Обратите внимание: Моя check_urls функция имеет for loop, и каждый цикл имеет один запрос на обновление данных MySQL.

+0

У вас возникли ошибки? Что означает «застрял на db.commit()»? Является ли программа застрявшей или вы имеете в виду, что эта часть не существует? – yuvi

+2

Кажется, что вы можете создавать 25 000 потоков и присоединять результаты обратно вместе перед фиксацией. Вы уверены, что это проблема? Это не так ... – Ben

+0

@yuvi Нет, я не получаю никаких ошибок. Я проверил свои журналы ошибок MySQL. Нет ошибок. Я имею в виду, что он работает только в первом цикле. Даже этот первый цикл no values ​​обновляется в базе данных – Giri

ответ

1

Кажется, что вы должны переместить свой db.commit() в функцию fetch после cursor.execute. Другой способ использования ключевого слова «global» с помощью курсора. Или, в-третьих, просто заведите курсор в качестве параметра функций.

Смежные вопросы