Многопроцессорная обработка Python непрерывно порождает процессы pythonw.exe без какой-либо реальной работы
5044 просмотра
3 ответа
Я не понимаю, почему этот простой код
# file: mp.py
from multiprocessing import Process
import sys
def func(x):
print 'works ', x + 2
sys.stdout.flush()
p = Process(target= func, args= (2, ))
p.start()
p.join()
p.terminate()
print 'done'
sys.stdout.flush()
создает процессы "pythonw.exe" непрерывно и ничего не печатает, даже если я запускаю его из командной строки:
python mp.py
Я использую последнюю версию Python 2.6 в Windows 7 как 32, так и 64 бит
Автор: lj8888 Источник Размещён: 12.11.2019 09:37Ответы (3)
32 плюса
Вы должны защитить затем точку входа в программу с помощьюif __name__ == '__main__':
.
Это специфическая проблема Windows. В Windows ваш модуль должен быть импортирован в новый интерпретатор Python, чтобы он мог получить доступ к вашему целевому коду. Если вы не остановите этот новый интерпретатор, выполняющий код запуска, он породит другого потомка, который затем породит другого потомка, пока он не pythonw.exe
обработает, насколько видит глаз.
Другие платформы используют os.fork()
для запуска подпроцессов, поэтому нет проблем с повторным импортом модуля.
Таким образом, ваш код должен выглядеть следующим образом:
from multiprocessing import Process
import sys
def func(x):
print 'works ', x + 2
sys.stdout.flush()
if __name__ == '__main__':
p = Process(target= func, args= (2, ))
p.start()
p.join()
p.terminate()
print 'done'
sys.stdout.flush()
Автор: Dave Webb
Размещён: 04.08.2010 12:31
2 плюса
В соответствии с руководящими принципами программирования для многопроцессорной обработки, в Windows необходимо использоватьif __name__ == '__main__':
1 плюс
Забавно, работает на моей машине с Linux:
$ python mp.py
works 4
done
$
Должна ли многопроцессорная система работать в Windows? Многие программы, появившиеся в мире Unix, не так хорошо справляются с Windows, потому что Unix использует fork(2)
для клонирования процессы довольно дешево, но (насколько я понимаю), Windows не поддерживает fork(2)
изящно, если она вообще существует.
Вопросы из категории :
- python Обработка XML в Python
- python Как я могу использовать Python itertools.groupby ()?
- python Python: На какой ОС я работаю?
- python Как я могу создать непосредственно исполняемое кроссплатформенное приложение с графическим интерфейсом на Python?
- python Вызов функции модуля с использованием его имени (строки)
- windows Эквивалент Windows «хороший»
- windows Реестр или INI-файл для хранения пользовательских настроек приложения
- windows Как я могу разработать для iPhone, используя машину для разработки Windows?
- windows Как настроить OpenFileDialog для выбора папок?
- windows Java: программный способ определения текущего пользователя Windows
- process Как отложить выполнение кода в Visual Basic (VB6)?
- process Как мне начать процесс с C #?
- process В чем разница между процессом и потоком?
- process How to prevent a background process from being stopped after closing SSH client in Linux
- process Как создать процесс и перехватить его STDOUT в .NET?
- multiprocessing многопроцессорность: совместное использование большого объекта только для чтения между процессами?
- multiprocessing InterlockedIncrement vs. ++
- multiprocessing Дочерние процессы, созданные с помощью многопроцессорного модуля Python, не будут печататься
- multiprocessing еще одна путаница с ошибкой многопроцессорности, объект 'module' не имеет атрибута 'f'
- multiprocessing Многопроцессорность против многопоточности Python