Многопроцессорность Python – потеря окна командной строкиPython

Программы на Python
Anonymous
Многопроцессорность Python – потеря окна командной строки

Сообщение Anonymous »

Я запускаю следующую программу Python, чтобы запустить несколько процессов одновременно. Каждый процесс будет выполняться несколько секунд. Это запускается из командной строки. Но если я прерываю выполнение (ctl-C), я часто получаю консольное сообщение «прерывание клавиатуры» вместе с длинной обратной трассировкой, и командная строка навсегда теряется. Я должен закрыть командную строку и запустить новую. В зависимости от времени иногда можно вводить новые команды, но приглашение ввода C\xxx\xxx> отсутствует.
Я ожидал, что ctl-C просто завершит работу основной строки выполнено, что, в свою очередь, приведет к уничтожению запущенных дочерних процессов. Но это было не так.
Почему эту программу нельзя прервать, не отключив командную строку снова?

from multiprocessing import Process, Pool
import os
import time

def proc(name):
print('\nStarting process name:',name, 'PID: ', os.getpid())
for i in range(1,5):
print (os.getpid(),': ',i,'\n')
time.sleep(1)

if __name__ == '__main__':
print ('\nMain process ID:', os.getpid(), '\n')
numServers = 3
serverNum = []
for i in range(numServers):
serverNum.append(i+1)
print ('serverNum: ', serverNum)
with Pool(numServers) as p:
p.map(proc, serverNum)

# --> hang here until the processes complete
# Execution stops when all processes complete
print ('Ending mainline task', os.getpid())
exit(0)

Вывод программы:

Main process ID: 40536

serverNum: [1, 2, 3]

Starting process name: 1 PID: 34508
34508 : 1

Starting process name: 2 PID: 2200
2200 : 1

Starting process name: 3 PID: 43476
43476 : 1

34508 : 2

2200 : 2

43476 : 2

34508 : 3

2200 : 3

43476 : 3

34508 : 4

2200 : 4

43476 : 4

Ending mainline task 40536


Подробнее здесь: https://stackoverflow.com/questions/789 ... mpt-window

Вернуться в «Python»