Было бы (на удивление!) здорово, если бы модуль multiprocessing оказался работоспособным под Windows.Olej писал(а): Очень любопытно!
Переделал (добавил + некоторые исправления) вот тот архив mthrs.tgz, который показывался и раньше...
Напомню:
- поток берёт свой исполнимый код из функции;
- exec*() (или spawn*(), где они такие есть) берёт свой исполнимый код из исполнимого файла (.exe в случае Windows, ELF-формата в случае Linux);
- fork() берёт свой исполнимый код как копию собственного процесса;
Последней возможности (не которой много лет стояли UNIX системы) нет на дух в Windows, никогда не было ... и никогда уже не будет . Значит нужен какой-то очень искусственный способ сделать нечто подобное в Windows.
С 1-й попытки проломить Python-параллелизм в Windows не получилось... Бесконечной лентой сыпятся мало понятные сообщение вида:
Код: Выделить всё
c:\Python-test\mthrs>mthrsw.py -n10000000 -mm
...
File "C:\Python33\lib\multiprocessing\forking.py", line 328, in get_command_line
is not going to be frozen to produce a Windows executable.''')
RuntimeError:
Attempt to start a new process before the current process
has finished its bootstrapping phase.
This probably means that you are on Windows and you have
forgotten to use the proper idiom in the main module:
if __name__ == '__main__':
freeze_support()
...
The "freeze_support()" line can be omitted if the program
is not going to be frozen to produce a Windows executable.
...
Потому что это достаточно принципиально:
- на сегодня для Linux видно возможность ускорить вычислительную работу Python за счёт N ядер (даже 2-е таких возможности: os.fork & multiprocessing.pool);
- а для Windows такой возможности пока не видно...