我需要使用线程模块在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()内运行无限循环。最后我像你说的那样打电话给服务器。
答案 0 :(得分:6)
您不希望在join()
功能中使用__init__
。这导致系统阻塞,直到每个线程完成。
我建议你重新构建你的程序,这样你的主要功能看起来更像是:
if name == "__main__":
servers = [MainServer(), DownloadServer()]
for s in servers:
s.start()
for s in servers:
s.join()
也就是说,为MainServer
和DownloadServer
创建一个单独的线程类,然后让它们从主进程异步启动,然后再加入。