好的,所以我的一个功能是打开一个url并读取其内容,然后将其写入文件中 问题是当我这样做我的UI冻结我知道我需要使用异步下载,但我似乎不太了解如何! 开放的网址约为10-20毫克 我会http://docs.python.org/library/threading.html以任何方式帮助我吗? 我的代码:
f = open("hello.txt",'wb')
datatowrite = urllib.urlopen(link).read()
f.write(datatowrite)
f.close()
一个例子将非常感激
由于
答案 0 :(得分:0)
您可以使用asynhttp客户端执行此操作,因为您无需阅读线程上的文档。
答案 1 :(得分:0)
这是一个例子。 10
调用中的asyncDownload
是以秒为单位的超时时间。你会想要增加它,或者可能完全摆脱它。下载结果存储在thread.dataToWrite
。
import threading
import urllib2 as ul
class asyncDownload(threading.Thread):
def __init__(self,url,http_timeout):
threading.Thread.__init__(self)
self.url = url
self.http_timeout = http_timeout
def run(self):
self.dataToWrite = ul.urlopen(self.url,timeout=self.http_timeout).read()
url = 'http://www.yahoo.com'
thread = asyncDownload(url,10)
thread.run()
print('this thread is still running')
答案 2 :(得分:0)
您需要获取给定的线程示例并将其组合到wxPython程序中。您可以在此站点上使用该示例,并基本上稍微修改它以使用新的线程示例:http://www.blog.pythonlibrary.org/2010/05/22/wxpython-and-threads/
答案 3 :(得分:0)
改编自http://wiki.wxpython.org/LongRunningTasks
import wx
import thread
class MainFrame(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent)
self.btn = wx.Button(self, label="Start")
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(self.btn, proportion=0, flag=wx.EXPAND)
self.SetSizerAndFit(sizer)
self.Bind(wx.EVT_BUTTON, self.onButton)
def onButton(self, evt):
self.btn.Enable(False)
thread.start_new_thread(self.longRunning, ())
def onLongRunDone(self):
print "finished my task, I may want to update GUI elements here"
self.btn.Enable(True)
def longRunning(self):
f = open("hello.txt",'wb')
datatowrite = urllib.urlopen(link).read()
f.write(datatowrite)
f.close()
wx.CallAfter(self.onLongRunDone)
if __name__ == "__main__":
app = wx.PySimpleApp()
app.TopWindow = MainFrame(None)
app.TopWindow.Show()
app.MainLoop()