0

Непонятно, почему Python 2.7 implementation из Pool не имеет метода __exit__(), который присутствует в Python 3 version этого же класса. Можно ли добавить метод __exit__() (вместе с __enter__(), конечно) (я просто хочу использовать with Pool(n) as p:), или есть особая причина, чтобы избежать его?Почему класс пула при многопроцессорности не имеет метода __exit __() в Python 2?

ответ

2

Не похоже, что есть какая-то причина, чтобы избежать этого. Глядя на него и быстро проверяя его, он не вызывал какого-либо странного поведения. Это было реализовано в Issue 15064, кажется, что оно не было добавлено в 2.7 (возможно, потому, что учитывались только исправления ошибок).

Возвращение self из __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

Это именно то, что я имел в виду, чтобы сделать. Спасибо за ссылку на эту проблему. Жаль, что они не добавили метод __exit__ к Py2.7. –

Смежные вопросы