PyDev不认识Celery任务装饰器

时间:2012-10-08 00:35:53

标签: python eclipse pydev celery

我在Eclipse / PyDev中遇到了Python / Celery项目的以下问题。 我在myapp.tasks模块中定义了我的任务函数,如下所示:

@celery.task(max_retries=None)
def mytask(parm1):
    ...
    myapp.myfunction(parm1)
    ...

然后,在另一个模块中,我希望向正在调用该函数的任务发送重试信号。所以,我喜欢这样:

import myapp.tasks
...
def myfunction(parm1):
    ...
    raise myapp.tasks.mytask.retry(countdown=60)

由于某种原因,PyDev标记了最后一行,出现错误:'导入时未定义的变量:重试' 但代码确实有效。 这是一个不识别装饰者的PyDev问题,还是我在这里做错了什么?

2 个答案:

答案 0 :(得分:0)

Pydev显然正在使用静态分析,这对于动态语言来说相当奇怪。但是我现在添加了一个hack,应该让PyDev成功地静态分析芹菜模块。您可以通过安装3.0分支来试用它:

pip install https://github.com/celery/celery/zipball/3.0

答案 1 :(得分:0)

PyDev使用静态分析。您可以添加“强制内置”来解决错误标记。

  1. 转到窗口 - >首
  2. 选择PyDev - >口译员 - >左窗格中的Python解释器
  3. 在右侧窗格中选择您用于Celery的python解释器
  4. 在底部,选择“强制Bultins”,然后点击“新建......”
  5. 添加myapp.tasks.mytask或任何其他类型
  6. 在我的情况下,我需要添加“celery.decorators”来解决类似的错误。我正在使用Eclipse Neon(4.6.3),但界面变化很小。我用这种技术解决了协议缓冲区中的错误已有好几年了。