Python中的阻塞I/O

Python中的阻塞I/O,python,multithreading,Python,Multithreading,Python和多线程方面的新手 我读了一些关于什么是阻塞I/O和非阻塞I/O的文章,主要区别似乎是阻塞I/O只允许按顺序执行任务,而非阻塞I/O允许同时执行多个任务 如果是这样,阻塞I/O操作(一些Python标准内置函数)如何实现多线程 阻塞I/O会阻塞正在运行的线程,而不是整个进程。(至少在这种情况下,在标准PC上) 多线程不受定义的影响-只有当前线程被阻塞。阻塞I/O会阻塞它运行的线程,而不是整个进程。(至少在这种情况下,在标准PC上) 多线程不受定义的影响-只有当前线程会被阻塞。全局解释

Python和多线程方面的新手

我读了一些关于什么是阻塞I/O和非阻塞I/O的文章,主要区别似乎是阻塞I/O只允许按顺序执行任务,而非阻塞I/O允许同时执行多个任务


如果是这样,阻塞I/O操作(一些Python标准内置函数)如何实现多线程

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


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

阻塞I/O会阻塞它运行的线程,而不是整个进程。(至少在这种情况下,在标准PC上)


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

全局解释器锁(在cpython中)是一种适当的措施,以便同时只执行一个活动python线程。尽管令人沮丧,但这是一件好事,因为它是为了避免解释器损坏而设置的

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

值得注意的是,在Python3.2中,添加了代码以减轻全局解释器锁的影响。值得注意的是,python的其他实现没有全局解释器锁

请注意,这是python代码的一个限制,底层库可能仍在处理数据

此外,在许多情况下,当涉及I/O时,为了避免阻塞,处理IO的一种有用方法是使用轮询和事件:

  • 轮询涉及检查操作是否会阻塞并测试是否有数据。例如,如果您试图 从套接字中获取数据时,可以使用select()和poll()
  • 事件处理涉及回调的使用方式,即在相关IO操作刚刚发生时触发线程

全局解释器锁(在cpython中)是一种适当的措施,以便在同一时间只执行一个活动python线程。尽管令人沮丧,但这是一件好事,因为它是为了避免解释器损坏而设置的

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

值得注意的是,在Python3.2中,添加了代码以减轻全局解释器锁的影响。值得注意的是,python的其他实现没有全局解释器锁

请注意,这是python代码的一个限制,底层库可能仍在处理数据

此外,在许多情况下,当涉及I/O时,为了避免阻塞,处理IO的一种有用方法是使用轮询和事件:

  • 轮询涉及检查操作是否会阻塞并测试是否有数据。例如,如果您试图 从套接字中获取数据时,可以使用select()和poll()
  • 事件处理涉及回调的使用方式,即在相关IO操作刚刚发生时触发线程