在所有芹菜工人之间共享到mongodb的单个连接



我有一系列芹菜工人,他们执行任务,使用REDIS存储;特别是我有三类工人,他们分别执行三类任务。属于这些类别中每一个的任务都需要访问mongo数据库。出于效率的原因,我希望使用一个到DB的单一连接,供所有工作人员使用。到目前为止,我已经尝试将两者作为论据传递给";send_task";以以下方式连接:

myclient = MongoClient('localhost:27017')
celeryWorker.send_task('tasks.beampolyline', myclient)

但很明显,它返回的错误是对象不可JSON序列化;两者都试图在所有工作人员之间共享myclient对象,但效果不佳。知道吗?我觉得我离解决方案很近了,但我在尝试使用的两种方法上都陷入了困境。

一个解决方案是定义模块级连接。假设worker.py是您的工作模块:

from mongodb import MongoClient
shared_connection = MongoClient()
@app.task(...)
def task(self, a, b):
...  # use shared_connection inside task
return 

在此解决方案中,此工作线程的线程/进程之间共享连接。

你不能做一些类似的事情吗?:

import pymongo
from pymongo import MongoClient
from flask import *
client = pymongo.MongoClient("yourcredentials")
db = client['ALLWORKER']
worker_1 = db['worker1']
worker_2 = db['worker_2']

相关内容

  • 没有找到相关文章

最新更新