Использование multiprocessing.Pool в классе в Windows с IPython Notebook
Я написал метод класса для создания нескольких экземпляров второго класса с использованием multiprocessing.Pool
(см. Ниже). Используя IPython, это работает на Linux / OSX, но не на Windows (он будет зависать). Итак, мой вопрос; возможно ли, и что является самым кратким способом, изменить мой код, чтобы это работало в Windows? (Изменить: это, по-видимому, проблема, характерная для IPython Notebook)
Я прочитал множество сообщений о проблемах с Windows, у которых отсутствует fork()
и необходимость в if __name__ == "__main__":
но я не понимаю, как реализовать это в этом случае, если я использую IPython Notebook.
Спасибо заранее, Крис.
my_class_factory.py
import multiprocessing class MyClass(object): def __init__(self, a=1): self.a = a def unpack_and_make_class(val_dict): if val_dict.has_key('args'): args = val_dict.pop('args') else: args = [] return MyClass(*args, **val_dict) class MyClassFactory(object): def make_classes(self, inputs): pool = multiprocessing.Pool(processes=multiprocessing.cpu_count()) mapping = pool.map myclasses = mapping(unpack_and_make_class, inputs) pool.close() pool.join() return myclasses
затем в IPython Notebook:
In [1]: from my_class_factory import MyClassFactory In [2]: mcf = MyClassFactory() In []: cls = mcf.make_classes([{'a':1}, {'a':2}, {'a':3}])
это будет работать в Linux / OSx, но будет зависать в Windows с ошибкой:
AssertionError: __main__ Traceback (most recent call last): File "<string>", line 1, in <module> File "C:\Users\chris\Anaconda\lib\multiprocessing\forking.py", line 380, in main prepare(preparation_data) File "C:\Users\chris\Anaconda\lib\multiprocessing\forking.py", line 488, in prepare assert main_name not in sys.modules, main_name
- Многопроцессорность Python и сокеты не закрываются
- Оптимизируйте этот код анализа паролей python
- параллельное вычисление comb_with_replacement с использованием многопроцессорной обработки
- Можно ли использовать объекты сокета при многопроцессорности Python? socket.close (), похоже, не работает
- Многопроцессорность с помощью экрана и экрана
- Развернуть окно Sublime Text с помощью python
- Как узнать, когда кто-то поделился моей ссылкой на социальные сети
- многопроцессорный подпроцесс работает на Linux, но не на Windows
- Python: многопроцессорность и массив c_char_p
- Python Shared Memory Array, без атрибута get_obj ()
- многопроцессорный питон
- Python Multiprocess diff между Windows и Linux
- Python, используйте многопроцессорную обработку для ускорения работы cython
- многопроцессорность в консоли IPython на компьютере Windows – если требование __name_
- Django, Сигналы и другой процесс
- Python не может запустить Process с Process.start () в Windows. Сигналы PySide