我有一个应用程序(Gtk),它有一个嵌入式服务器(使用电路)。两个组件(GUI和服务器)都有无限循环。如何同时运行两个循环?
我还需要在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()
答案 0 :(得分: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()
否则,如果你正在使用Python< 2.6在Unix上,你可以摆弄os.fork()
来做同样的事情。 Threading 可能有效,但我不知道GTK或电路在线程中的效果如何。
答案 1 :(得分:1)
您可以从另一个线程运行Web服务器:
from threading import Thread
# ...
server = Server(8000)
server += MyServer()
web_server_thread = Thread(target=server.run)
web_server_thread.start()
gtk.main()