Python 可以返回芹菜类的列表吗?

Python 可以返回芹菜类的列表吗?,python,python-3.x,celery,Python,Python 3.x,Celery,我有一个关于芹菜的问题。 我正在调用一个名为task的函数,我想返回一个特定类的列表。 但如果我这样做,我的服务器会出错: No module named 'modelsgert' modelsgert是定义我的类的python文件的名称。 我已经将同一个文件导入到我服务器上的项目中,但他不知道这一点。他可能会发送一个指向芹菜服务器上文件位置的引用 代码芹菜服务器: from celery import Celery from sqlalchemy import create_engine f

我有一个关于芹菜的问题。 我正在调用一个名为task的函数,我想返回一个特定类的列表。 但如果我这样做,我的服务器会出错:

No module named 'modelsgert'
modelsgert是定义我的类的python文件的名称。 我已经将同一个文件导入到我服务器上的项目中,但他不知道这一点。他可能会发送一个指向芹菜服务器上文件位置的引用

代码芹菜服务器:

from celery import Celery
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from modelsgert import(
Diagnose,
Procedur,
DBSession,
Data
)
import time
celery = Celery('tasks', backend='amqp', broker='amqp://guest@localhost//')

@celery.task()
def test_task(data):
    diagnose = DBSession.query(Diagnose)
    listofdiagnoses = []
    listofdiagnoses.append(diagnose[0])
    listofdiagnoses.append(diagnose[1])
    return (listofdiagnoses)
代码金字塔服务器

celery = Celery( backend='amqp', broker='amqp://guest@192.168.1.5:5672//')
    celery.conf.update(CELERY_RESULT_BACKEND = 'amqp', BROKER_HOST='192.168.1.5', BROKER_USER='kristof', BROKER_PASSWORD='bob', BROKER_VHOST='myvhost', BROKER_PORT=5672)
    task = celery.send_task('tasks.test_task',["kakker"])
    TheData = task.get()

有没有办法以适当的方式解决此问题?

当您看到该错误时,是否确定
modelsgert
可用

芹菜默认使用pickle,该模块确实存储了模块和类的名称(以及类中包含的数据),当再次加载数据时,将动态查找模块和类。此阶段失败,因为无法导入
modelsgert

我必须指出,您正在尝试将SQLAlchemy对象发送到这里,这很少是一个好主意。对象被绑定到特定会话,当您取消绑定对象时,该会话将不再存在。移动过去,对象表示数据库状态,当您再次加载对象时,数据库状态很容易发生更改

相反,您应该发送对象标识符,并在另一端再次查询对象。发送主键而不是
Diagnose
对象列表:

listofdiagnoses = [d.id for d in diagnose]

另一方面,您可以使用这些标识符从数据库中再次加载
诊断
对象。

我认为金字塔项目知道modelsgert,因为我在文件的开头添加了代码:from.modelsgert import*@kristodochez:这样行吗?什么是完整的回溯?错误何时发生?它是在你的金字塔网络服务器上,还是在你的芹菜工人上?在我的金字塔网络服务器上。但在我之前的帖子中,我忘了在modelsgert前面加一个点。我现在编辑。这是妈妈吗?@Kristodochez:是的,那是另一种含义。这是相对于当前包的。您的错误似乎暗示另一个导入是全局导入。那是一个不同的模块,错误当然是有意义的。你是如何将你的项目添加到芹菜设置中的?@Kristodochez:不要。在您的金字塔服务器和芹菜服务器之间共享相同的包。至少,给它相同的全名,以便包含相同的顶级包。在金字塔中,它被称为
yourpackage.modelsgert
,在芹菜服务器上,它现在被称为
modelsgert
。这是一个很大的区别。