Python一次访问多个网页

时间:2009-07-20 19:20:13

标签: python user-interface multithreading download tkinter

我有一个tkinter GUI,可以同时从多个网站下载数据。我为每次下载运行一个单独的线程(大约28)。一个GUI进程的线程太多了吗?因为它真的很慢,每个页面应该花费大约1到2秒,但是当所有页面一次运行时需要超过40秒。有什么办法可以缩短下载所有页面所需的时间吗?感谢任何帮助。谢谢。

3 个答案:

答案 0 :(得分:2)

可能是GIL(全球翻译锁)妨碍了你。 Python在许多线程中都存在一些性能问题。

您可以尝试使用twisted.web.getPage(请参阅页面上的http://twistedmatrix.com/projects/core/documentation/howto/async.html)。 我没有基准。 但是在该页面上进行示例并添加28个延迟以查看它的速度将会非常快速地为您提供可比较的结果。 请记住,你必须使用gtk反应器并进入扭曲编程风格。

答案 1 :(得分:1)

一个进程可以在任何现代操作系统上拥有数百个线程而没有任何问题。

如果您的带宽受限,1到2秒乘以28则意味着40秒左右。如果您的延迟有限,它应该更快,但没有任何信息,我所能建议的是:

  • 将代码添加到您的代码中以确保它实际并行运行,并且您不会意外地序列化您的线程;
  • 使用网络监视器确保网络请求实际并行。

如果没有更多信息,很难提供更好的信息。

答案 2 :(得分:0)

您可以尝试使用进程而不是线程。 Python有GIL可能会导致你的情况出现延迟。