如何在Python中同时运行两个循环?
我有一个应用程序(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 或电路和线程的兼容性如何。