dict .__ getitem__ производительность со строками - PullRequest
0 голосов
/ 08 июня 2011

Я использую dict для хранения кэшированных путей в файловой системе, которую я реализовал.Ключи в dict являются строками.После некоторого профилирования я продемонстрировал, что поиск в словаре является узким местом.Насколько я понимаю, dict высоко оптимизирован.К сожалению, точность cProfile не включает внутреннюю работу кода поиска dict.

Есть ли какая-то причина, по которой поиск строк будет таким медленным в Python 3?Что я могу сделать, чтобы обойти или улучшить производительность?

1 Ответ

0 голосов
/ 28 октября 2011

Я думаю, есть необходимость оценить исходный код, чтобы понять, в чем разница. Недавно я попытался перенести код Python2 на Python3, но у меня было такое же плохое время поиска, Python2 примерно на 30% быстрее, чем Python3. Это не реальный код, а фиктивный класс, чтобы выяснить, где на самом деле проблема. Пример кода:

"""
python3
"""
from time import time
from random import randint

class Wooaah:

    def __init__(self):
        self.length=100000
        self.a=dict()
        self.b=dict()
        self.count=int()
        self.s=float()
        self.e=float()

    def dummy_data(self):
        for i in range(self.length):
            self.a[i]=time()
            self.b[i]=time()

    def setod(self):
        self.s=time()
        for i in self.a:
            if self.b.get(i):
                self.count+=1
        self.e=time()

a=Wooaah()
a.dummy_data()
a.setod()
print(a.count)
print(a.e-a.s)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...