hip*_*n_x 5 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()]
Run Code Online (Sandbox Code Playgroud)
当我调用服务器类时,它会自动运行无限循环.
那么如何一次运行2台服务器呢?
非常感谢您对Fragsworth的帮助,我只是测试新结构并且工作完美.MainServer和DownloadServer类继承自threading.Thread并在run()内运行无限循环.最后我像你说的那样打电话给服务器.
你不想join()在你的__init__功能.这导致系统阻塞,直到每个线程完成.
我建议你重新构建你的程序,这样你的主要功能看起来更像是:
if name == "__main__":
servers = [MainServer(), DownloadServer()]
for s in servers:
s.start()
for s in servers:
s.join()
Run Code Online (Sandbox Code Playgroud)
也就是说,创建一个单独的线程类为您MainServer和DownloadServer,然后让他们从异步主流程开始,之后加入.