Новичок для нарезки здесь. Я заимствование много кода из этого 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