Англійська для Streamlit Developers
Словник для розробників, які створюють програми для обробки даних за допомогою Streamlit — віджети, стан сеансу, поведінка перезапуску і кешування — для команд, які обговорюють внутрішні інструменти і демонстрації ML англійською мовою.
Streamlit перетворює простий скрипт Python на інтерактивну веб- програму, без написання HTML, CSS або JavaScript — віджети є лише викликами функцій, і весь скрипт перезапускається згори вниз при кожній взаємодії. Ця модель перезапуску є єдиною найбільшою річчю, яка зводить людей з розуму, і вона домінує в більшості дискусій про перегляд коду. Ось англійська, яка вам потрібна, щоб ясно говорити про Streamlit-програми.
Реверс моделі
** Повторне виконання ** — основна модель виконання Streamlit: весь скрипт виконується знову згори вниз кожного разу, коли користувач взаємодіє з віджетом, замість того, щоб лише оновити певний компонент, який було змінено.
- “Це не помилка — кожна взаємодія з віджетом викликає повний перезапуск, отже будь- які дорогі обчислення без кешування виконуються знову з нуля.” *
** Віджет ** — інтерактивний елемент інтерфейсу користувача ( st.button, st.slider, st.text_input ), який відображає елемент керування і повертає його поточне значення у рядку скрипту.
“Не зберігайте значення віджета у окремій змінній, перш ніж використовувати його у іншому місці — просто викликайте віджета знову, коли вам потрібно значення; Streamlit обробляє стан.”
** Виконання скрипту згори вниз ** — ментальна модель, за якої весь файл є послідовністю команд, які виконуються знову і знову у порядку кожної взаємодії, а не постійною, становою програмою у традиційному сенсі цього слова.
“Переконайтеся, що це виконання згори вниз при кожному клацанні, а не цикл подій — це переформулює причину існування стану сеансу.”
Стан сеансу і кешування
** Сеансовий стан ** — словниковий об’ єкт ( st.session_state ), який зберігає значення у кожному повторенні сеансу для одного користувача, оскільки локальні змінні скидаються під час кожного повторення.
“Цей лічильник скидає нуль при кожному клацанні, оскільки це локальна змінна — пересуньте її у стан сеансу, якщо ви дійсно хочете, щоб вона зберігалася під час повторних запусків.”
** Callback ** — функція, приєднана до віджета ( on_click, on_change ), яку буде виконано перед повторним запуском скрипту, часто використовується для оновлення стану сеансу у відповідь на взаємодію.
- “Використовувати зворотний виклик для безпосереднього оновлення стану сеансу, замість спроби прочитати нове значення віджета і реагувати на нього після повторного запуску — у іншому випадку час буде неправильним.” *
** Кэшування ( st.cache_data / st.cache_resource ) ** — декоратори, які зберігають результат дорогої функції (запит бази даних, завантаження моделі), щоб його не перераховували при кожному повторенні, за ключами аргументів функції.
“Загорніть виклик бази даних у
st.cache_data— зараз він перезапитує кожну взаємодію віджета, тому програма відчувається повільною.”
Розклад і розгортання
** Контейнер / стовпчики ** — примітивні елементи розкладки ( st.container, st.columns ), які використовуються для впорядкування віджетів і виводів у певний візуальний порядок, а не залежать лише від порядку скриптів.
“Загорніть ці три показники у
st.columns(3)замість того, щоб складати їх вертикально — панель приладів буде набагато краще виглядати, якщо розміщувати її поруч.”
** Фрагмент ** — розділ скрипту, який можна перезапустити незалежно від повної сторінки, введено для того, щоб уникнути повторних запусків повної програми для ізольованих, часто оновлюваних віджетів.
“Ця діаграма оновлення в реальному часі не потребує повного перезапуску програми — позначте її як фрагмент, щоб оновлювати тільки цей розділ.”
Поширені помилки
- Сказати « програма повільна » без вказівки, чи це дорогі обчислення без кешування, чи просто очікувана вартість повного перезапуску на кожній взаємодії.
- Зберігання значень у локальних змінних, які мають зберігатися протягом взаємодій, замість використання стану сеансу, а потім заплутаність, чому стан « скидає »
- Забуваєте, що кешування визначається аргументами функцій, і здивуєтеся, коли кешована функція буде виконано знову, оскільки один з аргументів (наприклад, змінний об’ єкт) змінив свою ідентичність.
Практичні вправи
- Поясніть у двох реченнях, чому змінну, визначену у середині скрипту, скидають кожного разу, коли користувач натискає кнопку у програмі Streamlit.
- Написати короткий опис PR для обгортання виклику бази даних у
st.cache_data, щоб виправити повільну панель приладів. - Написати коментар перегляду коду, у якому буде пояснено, чому лічильник має перебувати у стані сеансу, а не у вигляді звичайної локальної змінної.
Зв’язані ресурси
- Англійська мова для науковців
- Англійська для розробників Python
- Англійська мова для ML Model Evaluation Discussions
Навигація по лінії: понад основи
Сама Streamlit не вимагає володіння складним технічним жаргоном - її простота є частиною її привабливості. Однак, коли ви співпрацюєте з командами розробників, презентуєте свої проекти зацікавленим особам або документуєте свою роботу, чітка, точна англійська мова стає критичною. Це не просто про те, що ти робиш, а як ти це робиш, і який ефект це має. Багато нерідних носіїв перекладають технічні поняття буквально, що призводить до нерозуміння і неефективності. Давайте зосередимося на уточненні цих перекладів - особливо навколо опису змін, вирішення проблем і вираження цінності вашого Streamlit-програми.
Однією з ключових областей є формулювання рішень щодо «часів виконання» і «перезапусків». Замість того, щоб просто сказати « програму слід перезапустити », більш професійним підходом буде сказати « нам слід перезапустити програму Streamlit, щоб відобразити оновлені дані ». Або, пояснюючи ваду, скажіть « Стан сеансу було неправильно збережено, що призвело до непослідовних результатів. Нам слід дослідити, яким чином обробляється змінна st.session_state. » Аналогічно, опис змін коду повинен переходити від « Я виправив це » до « Я вирішив проблему з логікою перевірки даних, забезпечивши точність звітів ». Будьте конкретними щодо того, * що * було виправлено і * чому *. Крім того, при обговоренні кешування — важливого елемента продуктивності Streamlit — уникайте неясних термінів, таких як « це кешується ». Поясніть, що ви реалізували « динамічне кешування за допомогою st.cache_data для мінімізації зайвих обчислень для часто доступних наборів даних »
Зрозуміти різницю між «вадою», «проблемою» і «дефектом» також важливо. «Багато» може бути простою, легко відтворюваною проблемою. «Проблема» означає більш складну або поширену проблему, яка вимагає дослідження. «Дефект» відноситься до помилки в самому коді - щось, що * може * викликати проблеми, навіть якщо це не зараз проявляється. Використання правильної термінології демонструє увагу до деталей і розуміння найкращих практик розробки програмного забезпечення.
І нарешті, не недооцінюйте важливість активного голосу. Замість « Дані було оброблено », скажіть « Я обробляв дані ». Активний голос є більш прямим, коротким і простішим для розуміння. Це сприяє відчуттю власності і ясності в вашому спілкуванні.
Ось приклад кешування Streamlit:
import streamlit as st
import time
@st.cache_data
def expensive_function(x):
time.sleep(2) # Simulate a slow computation
return x * x
number = st.slider("Choose a number", 1, 10)
result = expensive_function(number)
st.write(f"The square of {number} is: {result}")