我在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 问题还是我在这里做错了什么?
Pydev显然正在使用静态分析,这对于动态语言来说相当奇怪。 但是我现在添加了一个技巧,应该可以让 PyDev 成功地静态分析芹菜模块。 您可以通过安装 3.0 分支来试用它:
pip install https://github.com/celery/celery/zipball/3.0
PyDev 使用静态分析。 您可以添加"强制内置"来解决错误标记。
- 转到窗口 ->首选项
- 在左窗格中选择 PyDev -> 解释器 -> Python 解释器
- 在右窗格中选择您用于 Celery 的 python 解释器
- 在底部,选择"强制布尔廷斯",然后单击"新建..."
- 添加 myapp.tasks.mytask 或任何其他所需的类型
就我而言,我需要添加"celery.decorators"来解决类似的错误。我使用的是Eclipse Neon(4.6.3),但界面变化很小。 多年来,我一直使用这种技术来解决协议缓冲区中的错误。