0

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

4

3 回答 3

2

可能是 GIL(全局解释器锁)妨碍了您。Python 在多线程方面存在一些性能问题。

您可以尝试 twisted.web.getPage(请参阅页面下方的http://twistedmatrix.com/projects/core/documentation/howto/async.html)。我没有这方面的基准。但是以该页面上的示例并添加 28 个延迟来看看它有多快会给你一个相当快的结果。请记住,您必须使用 gtk reactor 并进入 twisteds 编程风格。

于 2009-07-20T19:31:22.877 回答
1

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

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

  • 将日志记录添加到您的代码中,以确保它实际上是并行运行的,并且您不会意外地以某种方式序列化您的线程;
  • 使用网络监视器确保网络请求实际上是并行发出的。

如果没有更多信息,很难给出更好的东西。

于 2009-07-20T19:35:07.237 回答
0

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

于 2009-07-20T19:31:59.520 回答