如何在Python中同时运行两个服务器?
我需要在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()
也就是说,为你的 MainServer
和 DownloadServer
创建一个单独的线程类,然后让它们从主程序异步启动,最后再进行合并。