python中的多线程url请求

时间:2013-09-29 14:20:35

标签: python multithreading

考虑以下问题: 我有一个gtk / tk应用程序,它显示列表(商店)中的网站内容。我想按顺序做以下事情:

  • 显示窗口&开始下载
  • 显示进度条
  • 完成下载后,将数据添加到列表(商店)

这是条件:用户 ,以便在下载时与应用互动。这意味着程序在整个下载过程中都在窗口的主循环中。

什么行不通:

  • urllib.urlopen()等待整个下载完成
  • Popen()不允许在两个线程之间进行通信

如何通知程序下载已完成是最大的问题

由于Tk / Gtk,无论如何我都是事件驱动的,我不妨使用信号

我解决此问题的首选方法是注册一个额外的信号“dl_done”,并在下载完成后将该信号发送给gtk。这甚至可能吗? 任何建议都是偏见的!

1 个答案:

答案 0 :(得分:1)

一个简单的解决方案是:

  • 在Gtk线程和下载线程之间共享一个Queue对象
  • 下载完成后,将数据放入队列中(例如,带有数据的元组) 从下载主题
  • 下载URL和下载的内容)
  • 在Gtk线程中,你设置一个glib定时器,定期检查是否有什么 由于“get_nowait”,new在队列中(例如,每100毫秒) 队列对象的方法。

如果需要,您可以拥有多个下载线程。