2015-05-23 3 views
0

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

def __getVal(self, key, val): 
     ret= 0 
     if key in self.mydict: 
      ret= val + self.mydict[key] 
     else: 
      ret = val 
     return ret 
+3

Что-то в словаре должно быть операцией O (1), если у вас не много столкновений. Сколько записей в словаре? Также, что такое «доблесть» и почему вы возвращаете ti вместо 'ret'? – IanAuld

+3

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

+0

Профилируйте свой код перед оптимизацией. – jwilner

ответ

0

Возможно, прежде чем пытаться разделить на многопроцессорных, вы должны попробовать это:

Вместо того, чтобы смотреть, если ключ находится в dictionnary, доступ к нему, в Try ... Catch блока.

На моем различном компьютере это намного быстрее, чем поиск в списке ключей.

Так что ваш окончательный код будет что-то вроде:

try: 
    ret = val + self.mydict[key] 
catch: 
    ret = val 
0

Просто используйте .get с `значением по умолчанию 0

return self.mydict.get(key, 0) + val 

Использование ret = 0 и добавление к нему бессмысленно, просто вернуться, как указано выше ,

0

Проблема заключается в том, как Ник Бастин сказал: «Это не скорость поиска, а стоимость того, чтобы увеличить словарь при продолжении добавления элементов».

Стоимость обусловлена ​​хешмапом, который создает для нового элемента. Из-за того, что hashmap является коротким окончательным столкновением и делает другие возможности для вставки.

Одно решение перекомпилирует Hashmap, чтобы сделать hashmap больше.

В этом случае изменение списка было достаточным, оно растет без неудобства столкновения.

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