开发者社区> 问答> 正文

Python线程:为什么thread.start()被阻止?

我正在尝试在线程中运行线程。当我执行时monitor.startMonitoring(),它卡在该函数中,特别是on threading.Thread(target=self._startMonitoring(), daemon=True).start()。

我该怎么办才能转到代码的最后一行(打印语句)?

谢谢

host = '127.0.0.1'
port = 9000

def _receiveHealthMsg(clientsock, clientaddr):
    try:
        while True:
            print(f'{clientaddr} : {clientsock.recv(1024).decode("utf-8")}: {datetime.datetime.now().isoformat()}')
    except ConnectionResetError:
        print("Connection has been severed")


class Monitor:
    def __init__(self, host, port):
        self._sock = socket.socket()
        self._sock.bind((host, port))
        self._sock.listen(5)
        self._threads = []
        self._clients = []

    def startMonitoring(self):
        threading.Thread(target=self._startMonitoring(), daemon=True).start()

    def _startMonitoring(self):
        while True:
            c, addr = self._sock.accept()
            thread = threading.Thread(target=_receiveHealthMsg, args=(c, addr))
            thread.start()
            self._threads.append(thread)
            self._clients.append((c, addr))

monitor = Monitor(host, port)
monitor.startMonitoring()

print('do some stuff here while threads are running')

展开
收起
天枢2020 2020-05-07 09:43:15 2125 0
1 条回答
写回答
取消 提交回答
  • 代码改变世界,我们改变代码

    您调用 _start_monitoring,没有将它作为要运行的函数传递。将行更改为:

    threading.Thread(target=self._startMonitoring, daemon=True).start() # ^ parentheses removed

    2020-05-07 09:43:45
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载