Как я могу запустить 2 цикла одновременно в Python? - PullRequest
2 голосов
/ 12 декабря 2010

У меня есть приложение (Gtk), которое имеет встроенный сервер (используя схемы). Оба компонента (графический интерфейс и сервер) имеют бесконечные циклы. Как я могу запустить оба цикла одновременно?

Мне также нужно, чтобы цикл сервера заканчивался, когда цикл 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 application

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 ]

2 голосов
/ 12 декабря 2010

Вы можете использовать модуль 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, вы можете возиться с <code>os.fork(), чтобы сделать то же самое. Потоки могут работать, но я не знаю, насколько хорошо GTK или схемы играют с потоками.

1 голос
/ 12 декабря 2010

Вы можете запустить веб-сервер из другого потока:

from threading import Thread

# ...

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

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

gtk.main()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...