Python 我应该使用什么线程模块来防止磁盘IO阻塞网络IO?

Python 我应该使用什么线程模块来防止磁盘IO阻塞网络IO?,python,multithreading,io,blocking,nonblocking,Python,Multithreading,Io,Blocking,Nonblocking,简而言之,我有一个Python应用程序,它从远程服务器接收数据,处理数据,响应服务器,偶尔将处理后的数据保存到磁盘。我遇到的问题是有很多数据要写,而保存过程可能需要半分钟以上。这显然是一个阻塞操作,因此网络IO在此期间暂停。可以说,我希望能够在后台执行保存操作,以便应用程序能够继续合理快速地与服务器通信 我知道我可能需要某种线程模块来实现这一点,但我无法说出线程、线程、多处理,以及各种其他选项之间的区别。有人知道我在找什么吗?既然您是I/O绑定的,那么就使用线程化模块 您几乎不需要使用线程,它是

简而言之,我有一个Python应用程序,它从远程服务器接收数据,处理数据,响应服务器,偶尔将处理后的数据保存到磁盘。我遇到的问题是有很多数据要写,而保存过程可能需要半分钟以上。这显然是一个阻塞操作,因此网络IO在此期间暂停。可以说,我希望能够在后台执行保存操作,以便应用程序能够继续合理快速地与服务器通信


我知道我可能需要某种线程模块来实现这一点,但我无法说出
线程
线程
多处理
,以及各种其他选项之间的区别。有人知道我在找什么吗?

既然您是I/O绑定的,那么就使用
线程化
模块

您几乎不需要使用
线程
,它是一个低级接口;
threading
模块是
thread
的高级接口包装器

多处理
模块与线程模块不同,
多处理
使用多个子流程执行任务<代码>多处理恰好使用了与
线程
相同的接口来减少学习曲线<代码>多处理通常用于CPU受限的计算,并且需要避免多核CPU中的GIL(全局解释器锁)

使用
asyncore
模块的异步I/O是多线程的一种更为深奥的替代方法。另一个选项包括Stackless Python和Twisted。

相关:(抱歉编辑)只是想指出,这个答案在磁盘I/O方面并不完全准确。异步磁盘I/O不同于非阻塞:阻塞指的是一个系统调用,它没有答案,并且保证需要时间——换句话说,是网络和管道I/O。但是,当从磁盘读取时,I/O将永远不会“阻塞”:它可能很慢。asyncore和twisted专注于非阻塞I/O,因此在这种情况下无能为力。线程应该有帮助,但我已经被磁盘I/O的GIL咬了。。。请随意纠正我的这一点。