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