Моя цель - создать новый процесс, который будет принимать число в виде ввода от пользователя в цикле и отображать его квадрат. Если пользователь не вводит число в течение 10 секунд, процесс должен завершиться (а не основным процессом). Я использую threading.Timer
с multiprocessing
.Исходный родительский процесс Python из потока
Пробовал Код
from threading import Timer
import multiprocessing as mp
import time
def foo(stdin):
while True:
t = Timer(10, exit,())
t.start()
print 'Enter a No. in 10 Secs: ',
num = int(stdin.readline())
t.cancel()
print 'Square of', num, 'is', num*num
if __name__ == '__main__':
newstdin = os.fdopen(os.dup(sys.stdin.fileno()))
proc1 = mp.Process(target = foo, args = (newstdin,))
proc1.start()
proc1.join()
print "Exit"
newstdin.close()
Но это не работает. Вместо exit
Я пробовал с sys.exit
, взял proc1
как global
и попробовал proc1.terminate
, но все равно никакого решения.
Использование 'threading.Timer' с' multiprocessing.Process' может быть не счастливой парой, попробуйте не смешивать потоки и процессы. http://stackoverflow.com/questions/25297627/why-no-timer-class-in-pythons-multiprocessing-module – d6bels
@ d6bels Я читал его в некоторых местах. Но другого способа добиться того, чего я хочу, нет. – RatDon
Ну, пока вы используете таймер только в подпроцессе, я не думаю, что это так плохо ;-) – d6bels