我使用Celery運行抓取一些數據的網絡蜘蛛,之後我需要將這些數據保存在數據庫的某個地方(例如SQLite),但據我所知,我無法在芹菜工作人員之間共享SQLAlchemy會話。你怎麼解決這個問題?哪種方式很常見?在芹菜工人內部存儲數據的常見方法是什麼?
目前我正在嘗試使用Redis作爲數據的中間存儲。
@celery.task
def run_spider(spider, task):
# setup worker
logger = logging.getLogger('Spider: %s' % spider.url)
spider.meta.update({'logger': logger, 'task_id': int(task.id)})
# push task data inside worker
spider.meta.update({'task_request': run_spider.request})
spider.run()
task.state = "inactive"
task.resolved = datetime.datetime.now()
db.session.add(task)
db.session.commit()
編輯:其實我錯了,我不需要共享會話,我需要爲每個芹菜進程/任務新的數據庫連接。
證實,Redis已接近完美。 – istinspring 2012-08-09 20:10:22