0
新手线程在这里。我是从这个thread借用大量的代码,同时试图使用线程/队列建立我的第一个脚本:线程/队列挂起问题
import threading, urllib2
import Queue
import sys
from PIL import Image
import io, sys
def avhash(url,queue):
if not isinstance(url, Image.Image):
try:
im = Image.open(url)
except IOError:
fd=urllib2.urlopen(url)
image_file=io.BytesIO(fd.read())
im=Image.open(image_file)
im = im.resize((8, 8), Image.ANTIALIAS).convert('L')
avg = reduce(lambda x, y: x + y, im.getdata())/64.
hash = reduce(lambda x, (y, z): x | (z << y),
enumerate(map(lambda i: 0 if i < avg else 1, im.getdata())),
0)
queue.put({url:hash})
queue.task_done()
def fetch_parallel(job_list):
q = Queue.Queue()
threads = [threading.Thread(target=avhash, args = (job,q)) for job in job_list[0:50]]
for t in threads:
t.daemon = True
t.start()
for t in threads:
t.join()
return [q.get() for _ in xrange(len(job_list))]
在这种情况下,job_list是URL列表。我发现这个代码在这个列表等于或小于50时工作正常,但当> 50时它会挂起。我一定有一些事情我根本不了解线程是如何工作的?
嗨,代码运行没有错误,但它只返回第一50个结果。 – ChrisArmstrong
请参阅我的编辑。 – pillmuncher
这工作,谢谢 – ChrisArmstrong