6

我在 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 用错误标记最后一行:'Undefined variable from import: retry' 但代码确实有效。这是一个无法识别装饰器的 PyDev 问题,还是我在这里做错了什么?

4

2 回答 2

0

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

pip install https://github.com/celery/celery/zipball/3.0
于 2012-10-23T13:16:44.567 回答
0

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

  1. 转到窗口-> 首选项
  2. 在左侧窗格中选择 PyDev -> Interpreters -> Python Interpreters
  3. 在右侧窗格中选择您用于 Celery 的 python 解释器
  4. 在底部,选择“Forced Bultins”并点击“New...”
  5. 添加 myapp.tasks.mytask 或任何其他需要的类型

就我而言,我需要添加“celery.decorators”来解决类似的错误。我使用的是 Eclipse Neon (4.6.3),但界面变化很小。多年来,我一直使用这种技术来解决协议缓冲区中的错误。

于 2017-10-25T18:26:09.917 回答