我有一个tkinter GUI,可以同时从多个网站下载数据。我为每次下载运行一个单独的线程(大约28)。一个GUI进程的线程太多了吗?因为它真的很慢,每个页面应该花费大约1到2秒,但是当所有页面一次运行时需要超过40秒。有什么办法可以缩短下载所有页面所需的时间吗?感谢任何帮助。谢谢。
答案 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可能会导致你的情况出现延迟。