我的目标是创建一个新进程,它将循环中的用户输入一个数字并显示它的平方。如果用户没有输入数字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()
但它没有用。而不是exit
我尝试使用sys.exit
,将proc1
视为global
并尝试proc1.terminate
,但仍然没有解决方案。
答案 0 :(得分:1)
将exit
替换为os._exit
,并且按预期工作。
t = Timer(10, os._exit, [0])
os._exit
完全取1 argument
,因此我们必须在列表中提及0
。 (在threading.Timer
中将参数传递给函数,参数应该在list
中。)