python文件运行一段时间后失效_在windows中运行一段时间后终止函数

我读过很多关于使用线程、子进程等的文章。。很多事情对我来说太复杂了。。。

我要做的就是在X个时间之后停止执行一个函数。def big_loop(bob):

x = bob

start = time.time()

while True:

print time.time()-start

这个函数是一个无止境的循环,从不抛出任何错误或异常,句点。

我不确定“命令、shell、子进程、线程等等”和这个函数之间的区别,这就是为什么我在操作子进程时遇到麻烦的原因。

我在这里找到了这个代码,并尝试了它,但正如您所看到的,它在10秒后仍在打印:import time

import threading

import subprocess as sub

import time

class RunCmd(threading.Thread):

def __init__(self, cmd, timeout):

threading.Thread.__init__(self)

self.cmd = cmd

self.timeout = timeout

def run(self):

self.p = sub.Popen(self.cmd)

self.p.wait()

def Run(self):

self.start()

self.join(self.timeout)

if self.is_alive():

self.p.terminate()

self.join()

def big_loop(bob):

x = bob

start = time.time()

while True:

print time.time()-start

RunCmd(big_loop('jimijojo'), 10).Run() #supposed to quit after 10 seconds, but doesn't

x = raw_input('DONEEEEEEEEEEEE')

有什么简单的方法可以杀死这个函数。正如你在我上面的尝试中看到的,它不会在20秒后终止,只是继续。。。

***哦,还有,我读过关于使用信号的文章,但是我在windows上,所以我不能使用报警功能。。(python 2.7)

**假设“无限运行的函数”不能被操纵或改变成非无限的,如果我能改变函数,那么我就把它改变成非无限的,不是吗?

下面是一些类似的问题,我无法通过它们的代码来处理我的简单函数:

也许你能?

好吧,我试着回答了,我收到了,它起作用了。。但是,如果删除if __name__ == "__main__":语句,如何使用它?当我删除此语句时,循环从未像以前那样结束。。import multiprocessing

import Queue

import time

def infinite_loop_function(bob):

var = bob

start = time.time()

while True:

time.sleep(1)

print time.time()-start

print 'this statement will never print'

def wrapper(queue, bob):

result = infinite_loop_function(bob)

queue.put(result)

queue.close()

#if __name__ == "__main__":

queue = multiprocessing.Queue(1) # Maximum size is 1

proc = multiprocessing.Process(target=wrapper, args=(queue, 'var'))

proc.start()

# Wait for TIMEOUT seconds

try:

timeout = 10

result = queue.get(True, timeout)

except Queue.Empty:

# Deal with lack of data somehow

result = None

finally:

proc.terminate()

print 'running other code, now that that infinite loop has been defeated!'

print 'bla bla bla'

x = raw_input('done')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值