Использование 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