Непонятно, почему Python 2.7 implementation из Pool
не имеет метода __exit__()
, который присутствует в Python 3 version этого же класса. Можно ли добавить метод __exit__()
(вместе с __enter__()
, конечно) (я просто хочу использовать with Pool(n) as p:
), или есть особая причина, чтобы избежать его?Почему класс пула при многопроцессорности не имеет метода __exit __() в Python 2?
0
A
ответ
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()
Это именно то, что я имел в виду, чтобы сделать. Спасибо за ссылку на эту проблему. Жаль, что они не добавили метод __exit__ к Py2.7. –