Celeryを使用して一部のデータをクロールするWebスパイダーを実行し、その後、このデータをデータベースのどこかに保存する必要があります(たとえば、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()
編集:実際、私は間違っていました。セッションを共有する必要はありません。セロリのプロセス/タスクごとに新しいデータベース接続を作成する必要があります。