在Python中让程序无限运行
有没有办法让一个函数无限运行呢?我想的这些函数就像我之前写的那种,可以从0开始生成斐波那契数列,或者找出两个数字之间的所有质数。比如说,我希望它一直运行,直到我按下某个键,或者过了一段时间,而不是等到某个数字达到特定的值。
另外,如果是基于时间的话,有没有办法让我延长时间,然后从那个时间点继续运行,而不是重新从0开始?我知道有一个时间模块,但我对它了解不多。
7 个回答
2
如果你想让你的函数继续运行,同时又需要用户(或系统)的输入,你有两个选择:
- 多线程
- 多进程
选择哪种方式取决于你需要的互动程度。如果你只是想在函数运行时打断它,而不在乎它的结束状态,那么多进程就可以了。
在这两种情况下,你可以依赖一些共享资源(比如文件或共享内存用于多线程,或者带有互斥锁的变量用于多线程),并定期检查这些资源的状态。如果它被设置为告诉你要退出,那就直接退出吧。
多线程的例子:
from threading import Thread, Lock
from time import sleep
class MyFct(Thread):
def __init__(self):
Thread.__init__(self)
self.mutex = Lock()
self._quit = False
def stopped(self):
self.mutex.acquire()
val = self._quit
self.mutex.release()
return val
def stop(self):
self.mutex.acquire()
self._quit = True
self.mutex.release()
def run(self):
i = 1
j = 1
print i
print j
while True:
if self.stopped():
return
i,j = j,i+j
print j
def main_fct():
t = MyFct()
t.start()
sleep(1)
t.stop()
t.join()
print "Exited"
if __name__ == "__main__":
main_fct()
2
你可以用生成器来实现这个功能:
def finished():
"Define your exit condition here"
return ...
def count(i=0):
while not finished():
yield i
i += 1
for i in count():
print i
如果你想改变退出的条件,可以把一个值传回生成器函数,然后用这个值来决定什么时候退出。
2
最简单的方法就是写一个有无限循环的程序,然后按下控制键C来停止它。没有更多的描述,很难知道这对你是否有效。
如果你是基于时间来做的,就不需要生成器。你可以让程序暂停,等待用户输入,比如问“继续吗?[y/n]”,然后从标准输入读取,根据你得到的答案决定是退出循环还是继续。