Найти - Пользователи
Полная версия: Потоки выполнения. Консультация.
Начало » Python для новичков » Потоки выполнения. Консультация.
1
Daedalus
Здравствуйте! Прошу помощи с данным вопросом.

Есть код.

 import os, os.path, time
import _thread as thread
list_path = []  #итоговый список всех абсолютных адресов до архивов.
exitmutix = [False] * 2 #нужен будет чтоб подождать завершения дочерних потоков.
def Worms(adress) :
    
    for path_name, list_dir, list_file in os.walk(adress):
        for to_file in list_file:
            full_path = os.path.join(path_name, to_file)
            if full_path.endswith('.rar') or full_path.endswith('.zip') or full_path.endswith('.7z'): #отфильтровывает все, кроме  абсолютных адресов до архивов.
                if full_path in list_path: pass 
                else:
                    if os.stat(full_path).st_size <= 1200000 and int(time.ctime(os.stat(full_path).st_mtime)[-4:]) == 2018: # еще фильтр. отсеивает фаилы больше 1,2 Мб и старше 2018 гг.
                        list_path.append(full_path) # итоговый список всех абсолютных адресов до архивов.
                        
#Вариант_1
Worms(r'\\192.168.0.60\общая 53\clowd\Документы клиентов\Организации')
Worms(r'\\192.168.0.60\общая 53\fcc')
#Вариант_2_потоки
thread.start_new_thread(Worms, (r'\\192.168.0.60\общая 53\clowd\Документы клиентов\Организации', 0))
thread.start_new_thread(Worms, (r'\\192.168.0.60\общая 53\fcc', 1))
print("Start thread")
while False in exitmutix: pass
print('END')

Вопрос вот в чём.
Подскажите пожалуйста почему вариант с потоками работает медленнее ? (или это только у меня медленнее )
Как я думал
Ведь в первом варианте два дерева по очереди обрабатывает , а во втором одновременно, и как я думал должно было быть быстрее пройти все каталоги. А получилось что нет.
Вариант 1 занимает ~ 5 мин, Вариант 2 ~ 9 мин.
doza_and
Похоже у вас скорость ограничивает не питон а доступ к диску. Который есть просто железка с головкой которая читает данные с поверхности. Раньше читали подряд, а теперь заставляете головку винчестера постоянно прыгать с одного места на другое. На это естественно требуется время.
Rodegast
Это что за прикол?
 exitmutix = [False] * 2 #нужен будет чтоб подождать завершения дочерних потоков.
###
print("Start thread")
while False in exitmutix: pass
print('END')
Daedalus
прошу прощения, забыл указать в примере функции.

 def Worms(adress, index) :
    
    for path_name, list_dir, list_file in os.walk(adress):
        for to_file in list_file:
            full_path = os.path.join(path_name, to_file)
            if full_path.endswith('.rar') or full_path.endswith('.zip') or full_path.endswith('.7z'): #отфильтровывает все, кроме  абсолютных адресов до архивов.
                if full_path in list_path: pass 
                else:
                    if os.stat(full_path).st_size <= 1200000 and int(time.ctime(os.stat(full_path).st_mtime)[-4:]) == 2018: # еще фильтр. отсеивает фаилы больше 1,2 Мб и старше 2018 гг.
                        list_path.append(full_path) # итоговый список всех абсолютных адресов до архивов.
    exitmutix[index] = True
doza_and
Не это Вам советуют про join прочитать
https://docs.python.org/3/library/threading.html
Daedalus
я знаю что такое join в модуле threading. у меня же вопрос был почему два потока работают медленнее одного потока. но похоже пост #2 уже дал ответ.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB