Python 从线程结束父进程
Python end parent process from thread
我的目标是创建一个新进程,它将循环中的用户输入数字并显示它的平方。如果用户在 10 秒内没有输入数字,则进程应该结束(不是主进程)。我正在使用 threading.Timer
和 multiprocessing
。
尝试过代码
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()
但它不起作用。我尝试使用 sys.exit
而不是 exit
,将 proc1
作为 global
并尝试了 proc1.terminate
,但仍然没有解决方案。
已将 exit
替换为 os._exit
,它按预期工作。
t = Timer(10, os._exit, [0])
os._exit
恰好是 1 argument
,因此我们必须在列表中提及 0
。 (在threading.Timer
中传递参数给函数,参数应该在list
中。)
我的目标是创建一个新进程,它将循环中的用户输入数字并显示它的平方。如果用户在 10 秒内没有输入数字,则进程应该结束(不是主进程)。我正在使用 threading.Timer
和 multiprocessing
。
尝试过代码
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()
但它不起作用。我尝试使用 sys.exit
而不是 exit
,将 proc1
作为 global
并尝试了 proc1.terminate
,但仍然没有解决方案。
已将 exit
替换为 os._exit
,它按预期工作。
t = Timer(10, os._exit, [0])
os._exit
恰好是 1 argument
,因此我们必须在列表中提及 0
。 (在threading.Timer
中传递参数给函数,参数应该在list
中。)