Почему моя функция «зависает»

0
def retCursor():
    host = "localhost"
    user = "disappearedng"

    db = "gupan_crawling3"
    conn = MySQLdb.connect( host=host, user=user, passwd=passwd, db=db)
    cursor = conn.cursor()
    return cursor
singleCur = retCursor()


def checkTemplateBuilt(netlocH):
    """Used by crawler specifically, this check directly whether template has been built"""
    singleCur.execute( """SELECT templateBuilt FROM templateEnough WHERE netloc=%s""", [ netlocH])
    r = singleCur.fetchone()
    if r:
        if bool( r[0]):
            return True
    return False

Привет всем Я использую MySQLdb. По какой-то причине, через 30 минут после запуска моего приложения, он полностью остановится. Похоже, эта функция блокирует меня. (Не знаю, по какой причине)

Traceback (most recent call last):
  File "/usr/lib/python2.6/multiprocessing/process.py", line 231, in _bootstrap
    self.run()
  File "/mount/950gb/gupan5/disappearedng_temp/code_temp_NEWBRANCH/gupan5-yahoo/crawling/templateCrawling/TemplateCrawler/crawler/crawler.py", line 117, in run
    self.get_check_put()
  File "/mount/950gb/gupan5/disappearedng_temp/code_temp_NEWBRANCH/gupan5-yahoo/crawling/templateCrawling/TemplateCrawler/crawler/crawler.py", line 66, in get_check_put
    if not self.checkLinkCrawlability(linkS, priority):
  File "/mount/950gb/gupan5/disappearedng_temp/code_temp_NEWBRANCH/gupan5-yahoo/crawling/templateCrawling/TemplateCrawler/crawler/crawler.py", line 53, in checkLinkCrawlability
    if checkTemplateBuilt( getNetLoc( link)):
  File "/mount/950gb/gupan5/disappearedng_temp/code_temp_NEWBRANCH/gupan5-yahoo/crawling/templateCrawling/TemplateCrawler/publicapi/publicfunc.py", line 71, in checkTemplateBuilt
    singleCur.execute( """SELECT templateBuilt FROM templateEnough WHERE netloc=%s""", [ netlocH])
  File "/var/lib/python-support/python2.6/MySQLdb/cursors.py", line 153, in execute
    r = self._query(query)
KeyboardInterrupt

Btw это таблица:

CREATE TABLE templateEnough( 
    `netloc` INT(32) unsigned NOT NULL,   
    `count` SMALLINT(32) unsigned NOT NULL,
    `templateBuilt` TINYINT(1) unsigned DEFAULT 0 NOT NULL,
    PRIMARY KEY ( netloc )
) ENGINE=MEMORY DEFAULT CHARSET=utf8
;

Любые идеи?

Теги:

3 ответа

1

Попробуйте записать строку запроса в файл прямо перед его выполнением. Затем, когда вы думаете, что он висит, вы можете посмотреть запрос и посмотреть, работает ли он вручную

  • 0
    Вы имеете в виду просто распечатать оператор SQL до того, как его выполнит курсор? нормально будет сделать. Сомневаюсь, что это как-то связано с запросом.
  • 0
    если вы знаете, к какому запросу относится программа, то вы можете выполнить тот же запрос в mysqlclient, чтобы увидеть, что там происходит. Вы можете попробовать варианты запроса. Это выглядит как достаточно простой запрос, поэтому причина зависания может быть довольно странной. разделяй и властвуй
1

В таблице может быть блокировка, предотвращающая завершение запроса.

  • 0
    В самом деле? Как мне это определить?
  • 0
    Для innodb вы можете использовать «показывать статус innodb», см. Dev.mysql.com/doc/refman/5.0/en/innodb-monitors.html . Не уверен насчет памяти двигателя.
0

В соответствии с вашей трассировкой вы прервали script во время выполнения checkTemplateBuilt, а не enoughPassedForTemplate.

Я думаю, что проблема кроется в другой части кода; может быть, где-то есть бесконечный цикл? Может быть, в функции run?

  • 0
    Я отредактировал мою пасту. Я не думаю, что у меня был бы бесконечный цикл где-либо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню