2016-11-09 4 views
0

jediを使用するatomのオートコンプリート-pythonを使用していますmultiprocessingモジュールの誤った提案があるとわかりました。python3です。次に例を示します。python3のマルチプロセッシングモジュールのjediの完了が正しくありません

>>> 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クラスを持っています

python2さんと私は、彼らが少し異なっていることを発見したのpython3の multiprocessingモジュールを比較
>>> import multiprocessing as mp 
>>> [n for n in mp.__all__ if n.endswith('rocess')] 
['Process', 'current_process'] 

。デフォルトのコンテキストの名前空間の現代版の輸入名前空間:残念ながら

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#unsupported-features

に記載されています。しかし、それは長い時間かもしれません。 (それはもはや大きなパフォーマンスのキラーではありません)

しかし、今のところあなたはこの問題で生きなければならないと思います。

+0

あなたの答えをありがとう、私はあなたがしばらくそれを得ることを願っています。また、PyCharmのようなIDEでオートコンプリートがどのように機能するのか知っていますか? – frist

+1

同様に動作します。しかし、さらに、彼らは "骨格"ファイルをたくさん持っています(私は彼らがそれらを呼んでいると思います)。マルチプロセッシングの型推論は、おそらくこのようなスケルトンファイルにリダイレクトされ、より良い自動補完を可能にします(globals()はありません)。 これとは対照的に、JediはほとんどPythonコードを完全に理解しようとしました。プラグインおよび/またはスケルトンシステムが必要なところに来てください。 –

関連する問題