我正在构建一个同时发出多个请求的Web抓取工具。我目前正在使用multiprocessing
模块这样做,但由于它在数字海洋液滴上运行,我遇到了处理器/内存瓶颈。
由于这是一个网络刮板,并且在脚本上花费的大部分时间可能都在等待网络,因此为了减少资源使用而不是更有效地使用线程?线程是否检测到阻塞网络调用并释放锁定?交织多处理和多线程是否可行?
答案 0 :(得分:2)
由于multiprocessing
模块的开发基本上与之前的threading
模型兼容,因此您应该不会发现在单个进程中转移到线程操作太困难了。 / p>
任何阻塞调用(主要是I / O)都会导致调用线程被挂起(变得不可运行),因此其他线程将有机会使用CPU。
虽然可以在多个流程中使用多线程,但通常不会这样做。