如何在python中同时运行2个循环?

时间:2010-12-12 19:15:26

标签: python gtk

我有一个应用程序(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()

2 个答案:

答案 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()