diff --git a/scrapy/trunk/scrapy/templates/settings.tmpl b/scrapy/trunk/scrapy/templates/settings.tmpl index 9dfcf3226..7ca6bfddd 100644 --- a/scrapy/trunk/scrapy/templates/settings.tmpl +++ b/scrapy/trunk/scrapy/templates/settings.tmpl @@ -17,6 +17,7 @@ DEFAULT_ITEM_CLASS = 'scrapy.item.ScrapedItem' USER_AGENT = '%s/%s' % (BOT_NAME, BOT_VERSION) DOWNLOAD_TIMEOUT = 600 MYSQL_CONNECTION_SETTINGS = {"charset": "utf8" } +MYSQL_CONNECTION_PING_PERIOD = 600 SCHEDULER = 'scrapy.core.scheduler.Scheduler' SCHEDULER_ORDER = 'BFO' # available orders: BFO (default), DFO diff --git a/scrapy/trunk/scrapy/utils/db.py b/scrapy/trunk/scrapy/utils/db.py index e4e44d5b4..85aeacd5e 100644 --- a/scrapy/trunk/scrapy/utils/db.py +++ b/scrapy/trunk/scrapy/utils/db.py @@ -4,6 +4,7 @@ Function for dealing with databases import re from scrapy.conf import settings from scrapy.core import log +from scrapy.core.engine import scrapyengine def mysql_connect(db_uri, **kwargs): """ @@ -27,4 +28,12 @@ def mysql_connect(db_uri, **kwargs): dcopy["passwd"] = "********" log.msg("Connecting db with settings %s" % dcopy ) - return MySQLdb.connect(**d) + conn = MySQLdb.connect(**d) + + #this is to maintain active the connection + def _ping(): + log.msg("Pinging connection to %s/%s" % (d.get('host'), d.get('db')) ) + conn.ping() + scrapyengine.addtask(_ping, settings.getint("MYSQL_CONNECTION_PING_PERIOD", 600)) + + return conn \ No newline at end of file