来自线程的Python结束父进程

时间:2015-02-27 09:42:02

标签: python multithreading timer multiprocessing

我的目标是创建一个新进程,它将循环中的用户输入一个数字并显示它的平方。如果用户没有输入数字10秒钟,则该过程应该结束(不是主过程)。我将threading.Timermultiprocessing一起使用。

尝试过代码

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,但仍然没有解决方案。

1 个答案:

答案 0 :(得分:1)

exit替换为os._exit,并且按预期工作。

t = Timer(10, os._exit, [0])

os._exit完全取1 argument,因此我们必须在列表中提及0。 (在threading.Timer中将参数传递给函数,参数应该在list中。)