multithreading - 我们可以在目标函数本身内部运行一个线程吗?
问题描述
我不确定我们是否可以像下面提到的那样启动一个线程,因为我在尝试绑定地址 ('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()
解决方案
我不确定我们是否可以像下面提到的那样启动一个线程,
从技术上讲,是的,您可以,您收到的错误可能反映了这一点。
当我尝试绑定地址时遇到 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')
推荐阅读
- javascript - 未捕获的 SyntaxError:在变量中存储圆对象的无效或意外令牌错误
- haskell - Rainbox 库 - 如何在单元格上设置无/默认背景颜色?
- reactjs - ReactJS:我应该使用哪种生命周期方法来检测道具的变化?
- c# - 如何在多个 Linq IQueryables 上执行 sql Union
- c++ - 返回类型不可知的模板类成员函数
- css - 我想使用引导程序从移动设备的左侧删除填充?
- email - 无法使用 Gmail 连接到电子邮件服务器 (pop3)
- jupyter-notebook - 亚马逊云中提供的 Google Cloud Datalab(jupyter notebook 服务)托管服务等价物是什么?
- visual-c++ - 为什么 NodeCallback 中没有一些 NodeID
- django - 扩展 AbstractBaseUser 不打 ModelBackend - Django