如何在Python中同时运行两个循环?

2 投票
2 回答
1692 浏览
提问于 2025-04-16 08:25

我有一个应用程序(Gtk),里面嵌入了一个服务器(使用了circuits)。这两个部分(图形界面和服务器)都有无限循环。请问我该如何让这两个循环同时运行呢?

我还希望当gtk循环结束时,服务器的循环也能结束。

这是示例服务器的代码

from circuits.web import Server, Controller
import os

class MyServer(Controller):

    def index(self):

        return "Hello World"


server = Server(8000)
server += MyServer()
server.run()

这是示例gtk应用程序的代码

import gtk

class App:

    def __init__(self):

        self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
        self.window.connect("destroy",gtk.main_quit)
        self.window.show_all()

        gtk.main()

if __name__ == '__main__':
    app = App()

2 个回答

1

你可以在另一个线程中运行网络服务器:

from threading import Thread

# ...

server = Server(8000)
server += MyServer()

web_server_thread = Thread(target=server.run)
web_server_thread.start()

gtk.main()
2

你可以使用 multiprocessing 模块来实现这个功能:

from multiprocessing import Process

def run_app():
    ... run the app ...

def run_server():
    ... run the server ...

def main():
    app = Process(target=run_app)
    app.start()

    server = Process(target=run_server)
    server.start()

    app.join()
    server.terminate()

if __name__ == "__main__":
    main()

另外,如果你在 Unix 系统上使用的是 Python 版本低于 2.6 的话,你可以尝试使用 os.fork() 来做类似的事情。虽然 线程 也许可以用,但我不太确定 GTK 或电路和线程的兼容性如何。

撰写回答