#python #performance #time #pickle #uniform
#питон #Производительность #время #соленый огурец #Униформа
Вопрос:
Может кто-нибудь объяснить, что здесь происходит?
#!/usr/bin/python3 import pickle from time import perf_counter_ns as timer def timeit (run) : def timeit_ (f) : def inner (*args, **kwargs) : t1 = timer () for r in range (0, run) : result = f (*args, **kwargs) tt = timer () - t1 print (f'{f.__name__} {tt / 1000000 / run:10.2f} ms') return result return inner return timeit_ @timeit (10) def pickle_R_0 () : with open ("sklearn_model_0.pickle", "rb") as f : ats0 = pickle.load (f) return ats0 @timeit (10) def pickle_R_1 () : with open ("sklearn_model_1.pickle", "rb") as f : ats1 = pickle.load (f) return ats1 @timeit (10) def pickle_R_2 () : with open ("sklearn_model_2.pickle", "rb") as f : ats2 = pickle.load (f) return ats2 pickle_R_0 () pickle_R_1 () pickle_R_2 ()
ВОЗВРАТ
pickle_R_0 263.07 ms pickle_R_1 1.43 ms pickle_R_2 1.48 ms
Загруженные файлы-это один и тот же файл с разными именами. Почему первый занимает так много времени, в то время как последовательные загрузки выполняются намного быстрее, при этом разные функции и имена файлов?
Что заставило меня задуматься, так это то, что в моем проекте я импортирую эту модель sklearn, и с помощью профилировщика я заметил, что загрузка рассола теперь составляет до 6s! В то время как здесь тот же файл загружается намного быстрее на той же машине. Но времена все равно неравные, так что же это дает?
Комментарии:
1. Почти наверняка первая загрузка-это импорт классов, представленных загружаемым объектом. Вероятно, ему придется загрузить много знаний. При второй загрузке обнаруживается, что эти классы уже импортированы.
2. следовать за. Смотрит
sys.module.keys()
после первой загрузки и смотрит, стало ли она заметно длиннее.3.
def timeit (run) :
просто используйте встроенный модульtimeit
4. @FrankYellin вы правы, я упустил из виду эту функцию.