缺少Python和多线程sys.excepthook

时间:2016-08-14 13:49:16

标签: python multithreading

所以我从服务器上下载了很多文件。超过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()

1 个答案:

答案 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中的每个数字调用池映射。

我认为这是一个奇怪的系统,但我知道什么。有用。另外,我自己也是新手。