我正在开发一个项目,要求我创建多个线程来下载大型远程文件。我已经做到了这一点但我无法理解虽然与仅使用单个线程相比,下载具有多个线程的文件需要更长的时间。我使用我的xampp localhost来执行测试的时间。我想知道它是正常的行为还是因为我没有尝试从真实的服务器下载。
由于 肯尼迪
答案 0 :(得分:4)
答案 1 :(得分:1)
Python线程使用调用GIL(Golbal Interpreter Lock)的东西,有时会降低程序的执行时间。
在这里我没有做很多的讨论,我邀请你阅读this和this也许它可以帮助你理解你的问题,你也可以看到两个会议here和{ {3}}
希望这有助于:)
答案 2 :(得分:1)
Twisted使用非阻塞I / O,这意味着如果数据在套接字上现在不可用,则不会阻塞整个线程,因此您可以同时处理在一个线程中等待I / O的多个套接字连接。但是如果做一些不同于I / O(解析大量数据)的东西,你仍然会阻塞该线程。
当你使用stdlib的套接字模块时它会阻塞I / O,这意味着当你调用socket.read
并且数据暂时不可用时 - 它将阻塞整个线程,所以你需要一个线程每个连接以处理并发下载。
这是两种并发方法:
threading
+ socket
)。Twisted
)中连接。