微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何将包含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 举报,一经查实,本站将立刻删除。