gpt4 book ai didi

python - 在 RQ 中排队实例方法或对象?

转载 作者:太空狗 更新时间:2023-10-30 01:33:30 26 4
gpt4 key购买 nike

因此,RQ 明确声明我可以将对象的实例方法入队 here ,所以我一直在尝试这样做,但得到了一个 PicklingError:

q.enqueue(some_obj.some_func, some_data)
*** PicklingError: Can't pickle <type 'function'>: attribute lookup __builtin__.function failed

实际上,我只需要在我的方法中访问一个 SQL 连接,所以我试着让它成为一个显式接受 SQL 连接的函数。那也失败了:

q.enqueue(some_func, sql_sess, some_data)
*** PicklingError: Can't pickle <class 'sqlalchemy.orm.session.Session'>: it's not the same object as sqlalchemy.orm.session.Session

我该如何解决这个问题?我做错了什么,还是图书馆坏了?

最佳答案

当将一个作业加入队列时,完成的 pickling 是在你对你的阻塞函数的输入上尝试的。

与您类似,我最初有将 SQLAlchemy 对象传递到我的排队函数中的代码。此代码位于名为 init.py 的文件中。

user_emails = session.query(UserEmail).all()
for sql_alchemy_email_object in emails:
q.enqueue(parse_email_function, sql_alchemy_email_object)

产生了 PicklingError。我为解决此问题所做的工作是通过单个 ID 在 parse_email_function 中单独查找 SQLAlchemy 映射的 email_object。

然后我在 init.py 中将代码更改为:

user_email_ids = [email.id for email in session.query(UserEmail).all()]
for email_id in user_email_ids:
q.enqueue(parse_email_function, email_id)

然后,在包含 parse_email_function 的文件中,我通过传递给 parse_email_function() 的 ID 从 SQLAlchemy 抓取了单个电子邮件对象。

由于您询问了解决此问题的方法,避免这种情况的一种方法是简单地避免将 Object 直接传递给您的处理函数,而是传递一个静态 ID 以在您的处理函数代码中执行查找.

关于python - 在 RQ 中排队实例方法或对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32727612/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com