在Python中让程序无限运行

1 投票
7 回答
4416 浏览
提问于 2025-04-11 17:38

有没有办法让一个函数无限运行呢?我想的这些函数就像我之前写的那种,可以从0开始生成斐波那契数列,或者找出两个数字之间的所有质数。比如说,我希望它一直运行,直到我按下某个键,或者过了一段时间,而不是等到某个数字达到特定的值。

另外,如果是基于时间的话,有没有办法让我延长时间,然后从那个时间点继续运行,而不是重新从0开始?我知道有一个时间模块,但我对它了解不多。

7 个回答

2

如果你想让你的函数继续运行,同时又需要用户(或系统)的输入,你有两个选择:

  1. 多线程
  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]”,然后从标准输入读取,根据你得到的答案决定是退出循环还是继续。

撰写回答