如何在Python中同时运行两个服务器?

5 投票
1 回答
1145 浏览
提问于 2025-04-15 17:19

我需要在Python中同时运行两个服务器,使用的是线程模块。但是当我调用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()]

当我调用服务器类时,它会自动运行一个无限循环。
那么我该怎么才能同时运行两个服务器呢?


非常感谢你的帮助,Fragsworth。我刚测试了新的结构,运行得非常好。MainServer和DownloadServer类都继承自threading.Thread,并在run()里面运行无限循环。最后我按照你说的调用了这些服务器。

1 个回答

6

你不应该在你的 __init__ 函数里使用 join()。这样会导致系统一直等到每个线程完成才继续。

我建议你重新组织一下你的程序,让你的主函数看起来像下面这样:

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

也就是说,为你的 MainServerDownloadServer 创建一个单独的线程类,然后让它们从主程序异步启动,最后再进行合并。

撰写回答