0

Python 2.7 implementationPoolが同じクラスのPython 3 versionに存在する__exit__()メソッドを持っていない理由はわかりません。 __exit__()メソッド(もちろん__enter__()と一緒に)を追加するのは安全ですか(私はちょうどwith Pool(n) as p:を使用したい)、それを避ける特別な理由はありますか?なぜマルチプロセッシングのPoolクラスにPython 2の__exit __()メソッドがないのですか?

答えて

2

これを避ける理由はありません。それを見て、それを本当に素早くテストしても、どんな奇妙な行動も起こらなかった。これはIssue 15064に実装されています。ちょうど2.7に追加されていないようです(おそらくバグ修正のみが考慮されているためです)。

__enter__から呼び出し、terminate__exit__から呼び出すことは、Python 3.3で実装されているようにしてください。代わりにかかわらず、ソースを変更する(は、あなたの意図だった場合)、単にカスタムサブクラスを作成します。

from multiprocessing.pool import Pool as PoolCls 

class CMPool(PoolCls): 
    def __enter__(self): 
     return self 
    def __exit__(self, exc_type, exc_val, exc_tb): 
     return self.terminate() 
+0

これは私が行うには念頭に置いていたまさにです。問題へのリンクありがとう。 Py2.7に__exit__メソッドを追加しなかったのは残念です。 –

関連する問題