【问题标题】:How can I run 2 servers at once in Python?如何在 Python 中一次运行 2 台服务器?
【发布时间】:2009-12-24 06:04:14
【问题描述】:

我需要在 Python 中使用 threading 模块同时运行 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()]

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


非常感谢您对 Fragsworth 的帮助,我刚刚测试了新结构并完美运行。 MainServer 和 DownloadServer 类继承自 threading.Thread 并在 run() 中运行无限循环。最后我按照你说的给服务器打电话。

【问题讨论】:

    标签: python multithreading


    【解决方案1】:

    您不想在 __init__ 函数中使用 join()。这会导致系统阻塞,直到每个线程完成。

    我建议你重新构建你的程序,让你的 main 函数看起来更像下面这样:

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

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

    【讨论】:

      猜你喜欢
      • 2019-08-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-27
      • 1970-01-01
      • 1970-01-01
      • 2019-02-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多