Рубрики
Без рубрики

Как поддерживать масштабируемость в вашем коде Python

Автор оригинала: Shifa Martin.

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

Как разработчики, у нас должно быть инструменты для быстрого прототипа. Вот почему мы должны инвестировать усилия при приложении, которое масштабируется. В целом, построение существенного и масштабируемого применения возможно с языком программирования Python.

Python – это язык программирования высокого уровня, который также ориентирован на объектно. С таким качествами, такими как встроенные данные структуры данных, динамическое привязку и динамическое набрав, мы можем использовать его для разработки приложений как можно быстрее.

Python также можно использовать в качестве склеенного языка сценариев, который интегрирует существующие компоненты и помогает нам построить масштабируемые приложения.

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

Вот несколько советов, которые вы можете проверить для разработки масштабируемых приложений в Python.

Учитесь умно использовать «коллекции»

Python поддерживает богатые и мощные структуры/контейнеры данных для «коллекций», таких как Диктовать , Список , Установить и кортеж Отказ Они настолько ценны в создании масштабируемых приложений. Тем не менее, чрезмерное использование их может влиять на масштабируемость кода. Это легко обнаружить, когда коллекции были чрезмерно использованы.

# notebooks.csv holds meta information on a collection of notebooks:
# heading, writer, year of pub, etc.


# load_from_file returns a list of dicts.


notebooks = load_from_file('notebooks.csv')


notebook_summaries = dict()
for notebook in notebooks:


   notebook_summaries[notebook["heading"]] = notebook["summary"]


for heading, summary in notebook_summaries.items():


   # Do something interesting with the summary.


   print(heading, summary)

Из указанного выше кода вы можете четко видеть, что он создает заголовки отображения таблиц после прочтения данных ноутбуков из файла CSV. Если вы видите его с точки зрения памяти памяти, нет ничего плохого, если в Notebooks.csv есть сотни титулов.

Тем не менее, это не так, если оно связано с инвентаризацией целых магазинов ноутбуков с десятками заголовков. Вы можете иметь один или два номера с вашим кодированием, который также зависит от какой версии, которую вы используете, Python 2 или Python 3.

Это создает проблему узкого места с масштабируемостью памяти кода. Создание структуры данных под названием NoteBook_SummaryS не нужна здесь, но она улучшает читаемость. Линия «For» поможет вам сразу знать, что цикл работает здесь через резюме.

Новая структура данных содержит полное резюме каждого ноутбука, который может потреблять больше памяти, чем все другие поля. Предположим, если ноутбук потребляет N байтов памяти, то полный блок будет потреблять не менее 1,5 * N байтов.

Это будет лучше в масштабе в Python 3

notebooks = load_from_file('notebooks.csv')


for notebook in notebooks.items():


   print(notebook["title"], notebook["summary"])

Я рекомендую вам создавать переменные, которые хорошо называются, так как оно помогает повысить ремонтопригодность вашего кода Python.

Интеллектуальная итерация кодов Python

При разработке крупногабаритных приложений с Python масштабируемость не единственная вещь, которую вы должны рассмотреть. Вы можете столкнуться с несколькими другими проблемами. Например, проблема итерации является наиболее распространенным.

Иногда на линию в вашем кодировании ITEERATE по поводу ноутбука_Summary.items () и создает еще одну копию ноутбуков. Эта итерация кода может быть ответственным за производительность с низким кодом, в которой код Python начинает вешать, прежде чем запустить цикл для цикла. Это происходит потому, что ноутбуки_Summary.items () образует очень большой список, который потребляет больше памяти. Также это потому, что код Python выполняет Bytecode после forloop.

Он начнет выделять больше памяти для этого списка. Снова выпуск итерации влияет на Python 2, а также элементы () Python 3 () и делает дополнительную копию содержимого ноутбуков_сама. Разработчики могут использовать Iteritems вместо предметов в Python 2:

В Python 2, используйте «истеритмы» вместо «предметов»

notebooks = load_from_file('notebooks.csv')


    for notebook in notebooks.iteritems():


      print(notebook["title"], notebook["summary"])

Итак, точка здесь – заметить разницу между использованием итератора во всех версиях Python и создании списка. Это ответственность за разработчиком, чтобы оправдать правильный шаблон в соответствии с контекстом кодирования.

Используя «генераторы» для масштабируемости в Python Code

Функция генератора позволяет создавать итераторы более простыми способом. Представьте, что вы работаете над созданием программы программного обеспечения как грамматика, которая принимает в тексте, проанализировать предложения и выполнять какую-то грамматический анализ. Каждая строка предложения будет разделена на срок, за которым следует один или несколько символов.

Смотрите кодирование

import re
text = '''Full body of text. It has many sentences.
 
Some have grammatical errors and some are correct.'''
 
sentences = re.analyzed(r'\.\s+', text)
 
for sentence in sentences:
 
   print(sentence)

Запустите список

This is a body of text
It has many sentences
 
Some have grammatical errors and some are correct.
import random
def weathermaker(volatility, days):
    '''
    Yield a series of messages giving the day's weather and occasional commentary
    volatility ‑ a float between 0 and 1; the greater this number the greater
  the likelihood that the weather will change on each given day
    days ‑ number of days for which to generate weather
    '''
    #Always start as if yesterday were sunny
    current_weather = 'sunny'
    #First item is the probability that the weather will stay the same
    #Second item is the probability that the weather will change
    #The higher the volatility the greater the likelihood of change
    weights = 1.0‑volatility, volatility    #For fun track how many sunny days in a row there have been
    sunny_run = 1
    #How many rainy days in a row there have been
    rainy_run = 0
    for day in range(days):
        #Figure out the opposite of the current weather
        other_weather = 'rainy' if current_weather == 'sunny' else 'sunny'
        #Set up to choose the next day's weather. First set up the choices
        choose_from = current_weather, other_weather        #random.choices returns a list of random choices based on the weights
        #By default a list of 1 item, so we grab that first and only item with 0 current_weather = random.choices(choose_from, weights)0        yield 'today it is ' + current_weather
        if current_weather == 'sunny':
            #Check for runs of three or more sunny days
            sunny_run += 1
            rainy_run = 0
            if sunny_run >= 3:
                yield "Uh oh! We're getting thirsty!"
        else:
            #Check for runs of three or more rainy days
            rainy_run += 1
            sunny_run = 0
            if rainy_run >= 3:
                yield "Rain, rain go away!"
    return
 
#Create a generator object and print its series of messages
for msg in weathermaker(0.2, 10):
    print(msg)

Выход

$ python weathermaker.py
today it is sunny
today it is sunny
Uh oh! We're getting thirsty!
today it is sunny
Uh oh! We're getting thirsty!
today it is sunny
Uh oh! We're getting thirsty!
today it is rainy
today it is sunny
today it is rainy
today it is rainy
today it is rainy
Rain, rain go away!
today it is rainy
Rain, rain go away!

Из вышеуказанного кода ясно, что Генераторы Python отличный способ быстро создавать итераторы. У них много преимуществ, и они выделяют память для каждого предложения по одному. Они также облегчают разработчикам изменять код, не зависающий.

Другими генераторами пособия обеспечивают Инкапсуляция Это обеспечивает новые и полезные способы для вас, чтобы упаковать и изолировать внутренние кодовые зависимости. Вот почему вы можете использовать генераторы для циклов.

Вы можете добавить несколько заявлений о выходе в генераторе

def nums3():
   n = 0
 
   while n < 6:
 
  yield n
       n += 1
   yield 63 # Second yield
for num in nums3():
   print(num

Выход

0
1
2
3
63

Объяснение кода выше

Здесь вторая доход завершается после выходов WhiLeloop. Когда функция достигает неявного возврата в конце, итерация останавливается.

Окончательные слова

Итак, если вы не используете генераторы в вашем коде Python, научитесь сделать это. Я знаю, что ты будешь рад, что ты сделал это. Они являются основной частью кодирования Python и могут быть полезны для вашей следующей разработки приложений на Python.

Без сомнения, Python является очень полезным, разнообразным и ухоженным языком, и не связано с функциями. Однако я поделился идеями, которые я использую в моем дневном процессе кодирования, чтобы сделать все возможное.

Valuecoders – это опытный Компания по развитию программного обеспечения Отказ Если вам нужны услуги разработки Python, не стесняйтесь связаться .