Python中的阻塞I/O
Python和多线程方面的新手 我读了一些关于什么是阻塞I/O和非阻塞I/O的文章,主要区别似乎是阻塞I/O只允许按顺序执行任务,而非阻塞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上) 多线程不受定义的影响-只有当前线程会被阻塞。全局解释
如果是这样,阻塞I/O操作(一些Python标准内置函数)如何实现多线程 阻塞I/O会阻塞正在运行的线程,而不是整个进程。(至少在这种情况下,在标准PC上)
多线程不受定义的影响-只有当前线程被阻塞。阻塞I/O会阻塞它运行的线程,而不是整个进程。(至少在这种情况下,在标准PC上)
多线程不受定义的影响-只有当前线程会被阻塞。全局解释器锁(在cpython中)是一种适当的措施,以便同时只执行一个活动python线程。尽管令人沮丧,但这是一件好事,因为它是为了避免解释器损坏而设置的 当遇到阻塞操作时,当前线程产生锁,从而允许其他线程在第一个线程被阻塞时执行。但是,当CPU绑定的线程(当进行纯python调用时)时,无论运行多少线程,都只执行一个线程 值得注意的是,在Python3.2中,添加了代码以减轻全局解释器锁的影响。值得注意的是,python的其他实现没有全局解释器锁 请注意,这是python代码的一个限制,底层库可能仍在处理数据 此外,在许多情况下,当涉及I/O时,为了避免阻塞,处理IO的一种有用方法是使用轮询和事件:
- 轮询涉及检查操作是否会阻塞并测试是否有数据。例如,如果您试图 从套接字中获取数据时,可以使用select()和poll()
- 事件处理涉及回调的使用方式,即在相关IO操作刚刚发生时触发线程
- 轮询涉及检查操作是否会阻塞并测试是否有数据。例如,如果您试图 从套接字中获取数据时,可以使用select()和poll()
- 事件处理涉及回调的使用方式,即在相关IO操作刚刚发生时触发线程