python3中多处理模块的jedi completitions不正确

时间:2016-11-09 12:49:49

标签: python-3.x python-multiprocessing python-jedi

使用使用jedi的atom的autocomplete-python,我发现multiprocessingpython3模块的建议不正确。这是一个例子:

>>> import jedi
>>> source = '''
... import multiprocessing as mp
... mp.Pro'''
>>> script = jedi.Script(source, 3, len('mp.Pro'), 'example.py')
>>> script.completions()
[<Completion: process>]

模块实际上有process个包,但它在模块范围内有Process个类:

>>> import multiprocessing as mp
>>> [n for n in mp.__all__ if n.endswith('rocess')]
['Process', 'current_process']

比较python2&python3&#39; multiprocessing模块我发现它们略有不同。现代版本导入默认上下文命名空间的命名空间:

globals().update((name, getattr(context._default_context, name))
             for name in context._default_context.__all__)
__all__ = context._default_context.__all__

很遗憾,我不知道如何解决此问题或解决此问题。你有什么建议吗?

1 个答案:

答案 0 :(得分:1)

Jedi并不理解写给globals()。

http://jedi.readthedocs.io/en/latest/docs/features.html#unsupported-features

中明确提到了这一点

在很长一段时间里,我甚至没有考虑过实施这一点,现在我对它持开放态度。但这可能需要很长时间。 (它不再是一个重要的性能杀手。)

但是现在我认为你只需忍受这个问题。