如何在Python中一次运行2台服务器?

时间:2009-12-23 18:33:37

标签: python multithreading

我需要使用线程模块在Python中同时运行2个服务器,但是要调用函数run(),第一个服务器正在运行,但第二个服务器直到第一个服务器结束才运行。 /> 这是源代码:

import os
import sys
import threading

n_server = 0
n_server_lock = threading.Lock()

class ServersThread(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
        self.start()
        self.join()

    def run(self):
        global n_server, n_server_lock

        if n_server == 0:
            n_server_lock.acquire()
            n_server += 1
            n_server_lock.release()

            print(['MainServer'])

            # This is the first server class    
            main_server = MainServer()
        elif n_server == 1:
            n_server_lock.acquire()
            n_server += 1
            n_server_lock.release()

            print (['DownloadServer'])

            # This is the second server class
            download_server = DownloadServer()

if __name__ == "__main__":
    servers = []

    for i in range(2):
        servers += [ServersThread()]

当我调用服务器类时,它会自动运行无限循环。
那么如何一次运行2台服务器呢?


非常感谢您对Fragsworth的帮助,我只是测试新结构并且工作完美。 MainServer和DownloadServer类继承自threading.Thread并在run()内运行无限循环。最后我像你说的那样打电话给服务器。

1 个答案:

答案 0 :(得分:6)

您不希望在join()功能中使用__init__。这导致系统阻塞,直到每个线程完成。

我建议你重新构建你的程序,这样你的主要功能看起来更像是:

if name == "__main__":
    servers = [MainServer(), DownloadServer()]
    for s in servers:
        s.start()
    for s in servers:
        s.join()        

也就是说,为MainServerDownloadServer创建一个单独的线程类,然后让它们从主进程异步启动,然后再加入。