首页 > 解决方案 > 我们可以在目标函数本身内部运行一个线程吗?

问题描述

我不确定我们是否可以像下面提到的那样启动一个线程,因为我在尝试绑定地址 ('0.0.0.0', 5000): address already in use 时遇到 OSError: [Errno 98] 错误。

下面的代码实现是否正确。

import threading

def enable_server:
      os.system('python server.py')
      t1 = threading.Thread(target=enable_server, daemon=True)
      t1.start()

标签: multithreadingpthreadspython-multithreading

解决方案


我不确定我们是否可以像下面提到的那样启动一个线程,

从技术上讲,是的,您可以,您收到的错误可能反映了这一点。

当我尝试绑定地址时遇到 OSError: [Errno 98] 错误 ('0.0.0.0', 5000): address already in use

如果错误是由所提供的代码引起的,那么它一定来自os.system('python server.py'). 在这种情况下,server.py必须尝试设置一个侦听端口 5000 的套接字。第二次失败是完全有可能的,因为您的代码在终止后立即重新启动服务器,因为默认情况下,在TCP 或 UDP 端口关闭,在此期间系统将阻止其再次打开。

您应该能够通过重写没有线程的代码来确认线程与此无关,因为它应该首先编写,并观察(我预测)相同的行为。例如:

while True:
    os.system('python server.py')

推荐阅读