2016-06-15 4 views
0

поэтому я работал над простой программой python, чтобы перебирать каждое имя файла на компьютере, чтобы проверить тип файла изображения или нужный тип файла.Быстрее для циклов Python

for i in drives: 
    for root, dirs, files in os.walk(str(i.replace("\\","\\\\"))): 
     #print(root,dirs) 
     for file in files: 
      if file.endswith(".jpeg"): 
       pictures.append(file) 

Вы видите, что я использовал простой для группы петель (я думаю, что они называют это вложенностью я не знаю), и мне было интересно, если есть какая-то образом, чтобы ГПУ ускорить эту операцию или вы можете указать мне в чтобы я мог улучшить эффективность другим способом. Я замечаю, что в стеке возник вопрос о поиске пути к файлу для ключевого слова, но я прошу улучшить способ повышения эффективности.

+3

Вы не можете на самом деле GPU-ускорение * дискового ввода-вывода. * – kindall

+1

Узкое место здесь - дисковый ввод-вывод, вы ничего не можете с этим поделать в программном обеспечении – BlackBear

ответ

1

На самом деле нет существенных улучшений, которые вы можете сделать из-за ограничений ввода/вывода на диске (как говорится в комментариях). Однако, вместо использования os.walk(...), вы можете использовать os.scandir(...), чтобы получить немного больше скорости. Смотрите эту ссылку: https://www.python.org/dev/peps/pep-0471/

+0

Посмотрел на модуль os.scandir, но я не могу найти ссылку на вывод функции, похоже ли это на функцию ходьбы или? – waudy

+0

Возвращает объект-генератор. Он требует немного сборки (т. Е. Вам нужно сделать свою собственную рекурсивную функцию, если вы хотите циклически перебирать ее), но она значительно быстрее, если вы ее используете. Согласно документации, она может быть в 2 и 20 раз быстрее. – Brian

0

вы можете использовать нити и разнородные одну нить от водителя у вас первой линии ... тогда вы получите там быстрее

q = Queue() 
for i in drives: 
    t = Thread(target=your_method, args=(q,pictures)) 
    t.daemon = True 
    t.start() 
q.join() 

надежда могла помогла

+0

Используя этот метод, ему нужно будет поместить мьютекс на «картинки» в противном случае, вы создали условие гонки – Brian

Смежные вопросы