所以我从服务器上下载了很多文件。超过1000 ......所以我想我会编写一个脚本来为我做这个多线程的脚本,这样我就不必等待很长时间才能完成。问题是它吐出了一堆错误。我已经搜索了这个但是找不到任何与我所遇到的错误相关的东西,因为我没有在其他帖子中打印出任何输出。
我的计划是让线程链互相启动,以便它们不会发生两次文件并跳过其他文件。
感谢您的帮助!
mylist = [list of filenames in here]
mycount = 0
def download():
global mycount
url = "http://myserver.com/content/files/" + mylist[mycount]
myfile = urllib2.urlopen(url)
with open(mylist[mycount],'wb') as output:
output.write(myfile.read())
def chain():
global mycount
if mycount <= len(mylist) - 1:
thread.start_new_thread( download, ())
mycount = mycount + 1
chain()
chain()
答案 0 :(得分:0)
所以我实际上在经过一些谷歌搜索和阅读之后设法让它发挥作用。
当前代码:
mycount = 0
mylistLoc = []
for index in range(len(mylist)):
mylistLoc.append(index)
def download(mycount):
global mylistLoc
url = "http://myserver.com/content/zips/" + mylist[mycount]
try:
myfile = urllib2.urlopen(url)
with open(mylist[mycount],'wb') as output:
output.write(myfile.read())
except:
print "Could not open URL: " + url
mycount = mycount + 1
mylistLoc = [mycount]
from multiprocessing.dummy import Pool as ThreadPool
pool = ThreadPool(50)
pool.map(download, mylistLoc)
首先,我要提一下,try:语句与所有可能读取此内容的新手的多线程无关。
但是我在另一个stackoverflow线程上找到了这个方法,可以更好地解释这一点。
How to use threading in Python?
但基本上如果我理解正确,你首先要用
导入所有必要的功能from multiprocessing.dummy import Pool as ThreadPool
然后设置要激活的线程数。对我来说50很好。但请务必阅读更多内容,因为太多会导致问题。
然后是果汁pool.map(download, mylistLoc)
基本上,为mylistLoc中的每个数字调用池映射。
我认为这是一个奇怪的系统,但我知道什么。有用。另外,我自己也是新手。