vaibhavsingh97 / random-word

This is a simple python package to generate random english words
https://pypi.org/project/random-word/
MIT License
123 stars 25 forks source link

Speed up get_random_word() #89

Open Saviorich opened 1 year ago

Saviorich commented 1 year ago

I ran into an issue that when I call get_random_word() many times it is generating the words so slowly.

After some research I found that each time get_random_word() is called it loads local storage file with all the words.

I suggest to move it out from this function so local storage file will load once when class Local is loaded

Strangemother commented 9 months ago

I hit this issue and patched it for myself; Please steal.

import random
from random_word import RandomWords
from random_word.services.local import Local
import secrets
from json import load

class CachedLocal(Local):
    valid_words = None

    def get_words(self):
        if self.valid_words is not None:
            return self.valid_words

        with open(self.source) as word_database:
            self.valid_words = load(word_database)
        return self.valid_words

    def get_random_word(self):
        valid_words = self.get_words()
        return secrets.choice(list(valid_words.keys()))

class RandomWords(RandomWords):

    """Class for generating random words"""

    def __init__(self):
        self.service = CachedLocal()

    def get_random_word(self):
        return self.service.get_random_word()