如何将包含pymongo db的函数传递到rq队列绕过无能力对_thread.lock进行序列化?

问题描述

我有一个数据库一个监视它的服务。我想将有关上述数据库的呼叫排队到rq.Queue

callback.py

from pymongo import MongoClient


db_client = MongoClient(username='root',password='pass').db.collection


def do_something(db):
    while not list(db.find({})):
        print('empty db')
    print('found something')

但是,我每次尝试做这样的事情

from redis import Redis; from rq import Queue; from allocator import db_client,do_something
Queue(connection=Redis()).enqueue(do,(db_client,)

产生

TypeError: cannot pickle '_thread.lock' object

如何绕过此方法并允许排队的函数数据库交互?

我尝试过的事情:

  1. 使用另一个序列化器(莳萝-TypeError: cannot pickle 'sqlite3.Connection' object
  2. 在拥有数据库的类中包装do_something-同样的错误

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)