Неправильные завершения джедаев для многопроцессорного модуля в python3

Работая с autocomplete-python атома, который использует джедай, я обнаружил, что есть неправильные предложения для multiprocessing модуль в python3, Вот пример:

>>> 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 multiprocessing Модуль Я обнаружил, что они немного отличаются. Современная версия импортирует пространство имен из пространства имен контекста по умолчанию:

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

К сожалению, у меня нет идей, как решить эту проблему или обойти ее. У вас есть какие-нибудь предложения?

1 ответ

Решение

Джедай не понимает, как писать в глобалы ().

Это явно упоминается в http://jedi.readthedocs.io/en/latest/docs/features.html

В течение очень долгого времени я даже не думал о реализации этого, теперь я открыт для этого. Но это может продолжаться долго. (Это не было бы большим убийцей производительности больше.)

Однако сейчас я думаю, что вы просто должны жить с этим вопросом.

Другие вопросы по тегам