我使用 Celery 运行抓取一些数据的网络蜘蛛,然后我需要将这些数据保存在数据库中的某个位置(例如 SQLite),但据我所知,我无法在 Celery 工作人员之间共享 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()
编辑:其实我错了,我不需要共享会话,我需要为每个 celery 进程/任务创建新的数据库连接。