我在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问题,还是我在这里做错了什么?
答案 0 :(得分:0)
Pydev显然正在使用静态分析,这对于动态语言来说相当奇怪。但是我现在添加了一个hack,应该让PyDev成功地静态分析芹菜模块。您可以通过安装3.0分支来试用它:
pip install https://github.com/celery/celery/zipball/3.0
答案 1 :(得分:0)
PyDev使用静态分析。您可以添加“强制内置”来解决错误标记。
在我的情况下,我需要添加“celery.decorators”来解决类似的错误。我正在使用Eclipse Neon(4.6.3),但界面变化很小。我用这种技术解决了协议缓冲区中的错误已有好几年了。