2016-12-10 3 views
0

Я вызываю функцию ReadImages() в потоке t3. вот мой код.Передача функции и аргументов в поток

#ReadImages 
def ReadImages(path,queue1,queue2,queue3): 
    print('Training in thread...') 

    # Create a list of images and a list of corresponding names 
    (images, lables, names, id) = ([], [], {}, 0) 
    namess=[] 

    for (subdirs, dirs, files) in os.walk(fn_dir): 
     for subdir in dirs: 
      names[id] = subdir 
     namess.append(names[id]) 
     print "Names[id]", names[id] 
      subjectpath = os.path.join(fn_dir, subdir) 
      for filename in os.listdir(subjectpath): 
       path = subjectpath + '/' + filename 
       lable = id 
       images.append(cv2.imread(path, 0)) 
       lables.append(int(lable)) 
      id += 1 

    (im_width, im_height) = (112, 92) 

    # Create a Numpy array from the two lists above 
    (images, lables) = [numpy.array(lis) for lis in [images, lables]] 
    print namess 
    for i in range(len(images)): 
     queue1.put(images[i]) 
    for l in range(len(lables)): 
     queue2.put(lables[l]) 
    for n in range(len(names)): 
     queue3.put(names[n]) 

    return (images,lables) 

вот моя реализация потока:

if __name__ == '__main__': 


    images=[] 
    lables=[] 
    names=[] 
    queue1 = Queue.Queue() 
    queue2 = Queue.Queue() 
    queue3 = Queue.Queue() 

    t3 = threading.Thread(target = ReadImages(path,queue1,queue2,queue3)) 
    print"train", t3 
    t3.start() 

    while not queue1.empty(): 
     images.append(queue1.get()) 
    while not queue2.empty(): 
     lables.append(queue2.get()) 
    while not queue3.empty(): 
     names.append(queue3.get()) 

этот код работает нормально, и я получаю данные из очереди по мере необходимости, но его вызывает исключение, и я не знаю, что является причиной что. Я хочу удалить это исключение. Как я могу это сделать? здесь является исключением Обучение в теме ... поезд

Exception in thread Thread-1: 
Traceback (most recent call last): 
File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner 
self.run() 
File "/usr/lib/python2.7/threading.py", line 754, in run 
self.__target(*self.__args, **self.__kwargs) 
TypeError: 'tuple' object is not callable 
+0

Похоже, что трассировка неполна, должна быть какая-то конкретная информация о том, где она терпит неудачу между 'self .__ target (* self .__ args, ** self .__ kwargs)' и 'TypeError: 'tuple' объект не вызываем' – Shane

+0

't3 = threading.Thread (target = ReadImages (путь, queue1, queue2, queue3))' проблема в этой строке, она вызывает исключение при выполнении этого –

+0

Да, это точно, но интерпретатор должен был сказать вам, какая строка он находится в функции 'ReadImages (путь, queue1, queue2, queue3)', которые работают с ошибкой – Shane

ответ

0

Я точно не знаю, где ваша семьсот пятьдесят четвёртая строка кода, но дважды проверьте, если вы добавили запятые между каждым значением вашего кортежа. например ((x, y), (a, b), (p, q)).

+0

't3 = threading.Thread (target = ReadImages (путь, queue1, queue2, queue3)) проблема в этой строке', it вызывает исключение при выполнении этого –