在Python中阻止I/O



python上的新手和多线程。

我读了一些有关阻止和非阻滞I/O的文章,而主要区别似乎是阻止I/O仅允许允许依次执行任务,而非阻止I/O则允许多个允许多个要同时执行的任务。

如果是这样,则如何阻止I/O操作(一些Python标准内置功能)可以执行多个线程?

阻止I/O阻止其正在运行的线程,而不是整个过程。(至少在这种情况下,在标准PC上)

多线程不受定义的影响 - 只有当前线程被阻止。

全局解释器锁定(在CPYTHON中)是一项措施,因此只有一个活动的Python线程同时执行。尽可能令人沮丧,这是一件好事,因为它是为了避免口译员腐败而进行的。

遇到阻止操作时,当前线程会产生锁定,因此允许在第一个线程被阻止时执行其他线程。但是,当CPU绑定线程(纯粹是python调用时)时,无论运行多少个线程,都只能执行一个线程。

有趣的是,在Python 3.2中,添加了代码以减轻全局解释器锁的效果。有趣的是,Python的其他实现没有全局解释器锁

请不要这是Python代码的限制,而基础库可能仍在处理数据。

在许多情况下,在I/O方面,为了避免阻塞,处理IO的有用方法是使用轮询和事件:

  • 轮询涉及检查操作是否会阻止并测试是否有数据。例如,如果您想获得来自插座的数据,您将使用select()和poll()
  • Eventing 涉及使用回调,以使您的线程刚刚发生时触发线程

最新更新