diff --git a/14-Streamlit/app.py b/14-Streamlit/app.py new file mode 100644 index 000000000..98b29a209 --- /dev/null +++ b/14-Streamlit/app.py @@ -0,0 +1,29 @@ +import streamlit as st +import pandas as pd +import numpy as np + +## Title of the aplication +st.title("Hello Streamlit") + +## Diplay a Simple Text +st.write("This is a imple text") + +##create a simple Dataframe + +df = pd.DataFrame({ + 'first column': [1, 2, 3, 4], + 'second column': [10, 20, 30, 40] +}) + + +## Display the Dataframe +st.write("Here is the dataframe") +st.write(df) + + +##create a line chart + +chart_data=pd.DataFrame( + np.random.randn(20,3),columns=['a','b','c'] +) +st.line_chart(chart_data) \ No newline at end of file diff --git a/14-Streamlit/classification.py b/14-Streamlit/classification.py new file mode 100644 index 000000000..77a9c7203 --- /dev/null +++ b/14-Streamlit/classification.py @@ -0,0 +1,32 @@ +import streamlit as st +import pandas as pd +from sklearn.datasets import load_iris +from sklearn.ensemble import RandomForestClassifier + +@st.cache_data +def load_data(): + iris = load_iris() + df = pd.DataFrame(iris.data, columns=iris.feature_names) + df['species'] = iris.target + return df, iris.target_names + +df,target_names=load_data() + +model=RandomForestClassifier() +model.fit(df.iloc[:,:-1],df['species']) + +st.sidebar.title("Input Features") +sepal_length = st.sidebar.slider("Sepal length", float(df['sepal length (cm)'].min()), float(df['sepal length (cm)'].max())) +sepal_width = st.sidebar.slider("Sepal width", float(df['sepal width (cm)'].min()), float(df['sepal width (cm)'].max())) +petal_length = st.sidebar.slider("Petal length", float(df['petal length (cm)'].min()), float(df['petal length (cm)'].max())) +petal_width = st.sidebar.slider("Petal width", float(df['petal width (cm)'].min()), float(df['petal width (cm)'].max())) + +input_data = [[sepal_length, sepal_width, petal_length, petal_width]] + +## PRediction +prediction = model.predict(input_data) +predicted_species = target_names[prediction[0]] + +st.write("Prediction") +st.write(f"The predicted species is: {predicted_species}") + diff --git a/14-Streamlit/sampledata.csv b/14-Streamlit/sampledata.csv new file mode 100644 index 000000000..a43ecda13 --- /dev/null +++ b/14-Streamlit/sampledata.csv @@ -0,0 +1,5 @@ +,Name,Age,City +0,John,28,New York +1,Jane,24,Los Angeles +2,Jake,35,Chicago +3,Jill,40,Houston diff --git a/14-Streamlit/streamlit.ipynb b/14-Streamlit/streamlit.ipynb new file mode 100644 index 000000000..b87272155 --- /dev/null +++ b/14-Streamlit/streamlit.ipynb @@ -0,0 +1,140 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Introduction to Streamlit\n", + "Streamlit is an open-source app framework for Machine Learning and Data Science projects. It allows you to create beautiful web applications for your machine learning and data science projects with simple Python scripts." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "plaintext" + } + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "plaintext" + } + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "plaintext" + } + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "plaintext" + } + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "plaintext" + } + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "plaintext" + } + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "plaintext" + } + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "plaintext" + } + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "plaintext" + } + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "plaintext" + } + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "plaintext" + } + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/14-Streamlit/widgets.py b/14-Streamlit/widgets.py new file mode 100644 index 000000000..7508e7484 --- /dev/null +++ b/14-Streamlit/widgets.py @@ -0,0 +1,37 @@ +import streamlit as st +import pandas as pd + +st.title("Streamlit Text Input") + +name=st.text_input("Enter your name:") + + +age=st.slider("Select your age:",0,100,25) + +st.write(f"Your age is {age}.") + +options = ["Python", "Java", "C++", "JavaScript"] +choice = st.selectbox("Choose your favorite language:", options) +st.write(f"You selected {choice}.") + +if name: + st.write(f"Hello, {name}") + + +data = { + "Name": ["John", "Jane", "Jake", "Jill"], + "Age": [28, 24, 35, 40], + "City": ["New York", "Los Angeles", "Chicago", "Houston"] +} + +df = pd.DataFrame(data) +df.to_csv("sampledata.csv") +st.write(df) + + +uploaded_file=st.file_uploader("Choose a CSV file",type="csv") + +if uploaded_file is not None: + df=pd.read_csv(uploaded_file) + st.write(df) + diff --git a/15-Memory Management/memory_manage.ipynb b/15-Memory Management/memory_manage.ipynb new file mode 100644 index 000000000..c8a0f8d57 --- /dev/null +++ b/15-Memory Management/memory_manage.ipynb @@ -0,0 +1,1119 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Python Memory Management\n", + "Memory management in Python involves a combination of automatic garbage collection, reference counting, and various internal optimizations to efficiently manage memory allocation and deallocation. Understanding these mechanisms can help developers write more efficient and robust applications.\n", + "\n", + "1. Key Concepts in Python Memory Management\n", + "2. Memory Allocation and Deallocation\n", + "3. Reference Counting\n", + "4. Garbage Collection\n", + "5. The gc Module\n", + "6. Memory Management Best Practices" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Reference Counting\n", + "Reference counting is the primary method Python uses to manage memory. Each object in Python maintains a count of references pointing to it. When the reference count drops to zero, the memory occupied by the object is deallocated." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2\n" + ] + } + ], + "source": [ + "import sys\n", + "\n", + "a=[]\n", + "## 2 (one reference from 'a' and one from getrefcount())\n", + "print(sys.getrefcount(a))" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3\n" + ] + } + ], + "source": [ + "b=a\n", + "print(sys.getrefcount(b))" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2\n" + ] + } + ], + "source": [ + "del b\n", + "print(sys.getrefcount(a))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Garbage Collection\n", + "Python includes a cyclic garbage collector to handle reference cycles. Reference cycles occur when objects reference each other, preventing their reference counts from reaching zero." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "import gc\n", + "## enable garbage collection\n", + "gc.enable()\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "gc.disable()" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1036" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gc.collect()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[{'collections': 182, 'collected': 1611, 'uncollectable': 0}, {'collections': 16, 'collected': 255, 'uncollectable': 0}, {'collections': 2, 'collected': 1036, 'uncollectable': 0}]\n" + ] + } + ], + "source": [ + "### Get garbage collection stats\n", + "print(gc.get_stats())" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[]\n" + ] + } + ], + "source": [ + "### get unreachable objects\n", + "print(gc.garbage)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Memory Management Best Practices\n", + "1. Use Local Variables: Local variables have a shorter lifespan and are freed sooner than global variables.\n", + "2. Avoid Circular References: Circular references can lead to memory leaks if not properly managed.\n", + "3. Use Generators: Generators produce items one at a time and only keep one item in memory at a time, making them memory efficient.\n", + "4. Explicitly Delete Objects: Use the del statement to delete variables and objects explicitly.\n", + "5. Profile Memory Usage: Use memory profiling tools like tracemalloc and memory_profiler to identify memory leaks and optimize memory usage." + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Object obj1 created\n", + "Object obj2 created\n", + "Object obj1 deleted\n", + "Object obj2 deleted\n", + "Object obj1 deleted\n", + "Object obj2 deleted\n", + "Object obj1 deleted\n", + "Object obj2 deleted\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable <_ctypes.PyCArrayType 0x00000205D597D480>\n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable <_ctypes.PyCArrayType 0x00000205D597B1A0>\n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n", + "gc: collectable \n" + ] + }, + { + "data": { + "text/plain": [ + "592" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "## Handled Circular reference\n", + "import gc\n", + "\n", + "class MyObject:\n", + " def __init__(self, name):\n", + " self.name = name\n", + " print(f\"Object {self.name} created\")\n", + "\n", + " def __del__(self):\n", + " print(f\"Object {self.name} deleted\")\n", + "\n", + "# Create circular reference\n", + "obj1 = MyObject(\"obj1\")\n", + "obj2 = MyObject(\"obj2\")\n", + "obj1.ref = obj2\n", + "obj2.ref = obj1\n", + "\n", + "del obj1\n", + "del obj2\n", + "\n", + "## Manually trigger the garbage collection\n", + "gc.collect()\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0\n", + "1\n", + "2\n", + "3\n", + "4\n", + "5\n", + "6\n", + "7\n", + "8\n", + "9\n", + "10\n", + "11\n" + ] + } + ], + "source": [ + "## Generators For Memory Efficiency\n", + "#Generators allow you to produce items one at a time, using memory efficiently by only keeping one item in memory at a time.\n", + "\n", + "def generate_numbers(n):\n", + " for i in range(n):\n", + " yield i\n", + "\n", + "## using the generator\n", + "for num in generate_numbers(100000):\n", + " print(num)\n", + " if num>10:\n", + " break" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [], + "source": [ + "## Profiling Memory USage with tracemalloc\n", + "import tracemalloc\n", + "\n", + "def create_list():\n", + " return [i for i in range(10000)]\n", + "\n", + "def main():\n", + " tracemalloc.start()\n", + " \n", + " create_list()\n", + " \n", + " snapshot = tracemalloc.take_snapshot()\n", + " top_stats = snapshot.statistics('lineno')\n", + " \n", + " print(\"[ Top 10 ]\")\n", + " for stat in top_stats[::]:\n", + " print(stat)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ Top 10 ]\n", + "e:\\UDemy Final\\python\\venv\\Lib\\selectors.py:314: size=144 KiB, count=3, average=48.0 KiB\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\IPython\\core\\compilerop.py:174: size=11.2 KiB, count=122, average=94 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\IPython\\core\\builtin_trap.py:70: size=6512 B, count=1, average=6512 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\json\\decoder.py:353: size=5812 B, count=92, average=63 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\threading.py:272: size=3800 B, count=10, average=380 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\codeop.py:118: size=3509 B, count=47, average=75 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\zmq\\sugar\\attrsettr.py:45: size=3431 B, count=73, average=47 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\IPython\\core\\compilerop.py:86: size=3395 B, count=52, average=65 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\traitlets\\traitlets.py:731: size=2883 B, count=46, average=63 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\jupyter_client\\jsonutil.py:111: size=2050 B, count=41, average=50 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\traitlets\\traitlets.py:1543: size=2031 B, count=33, average=62 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\jupyter_client\\jsonutil.py:75: size=1456 B, count=7, average=208 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\re\\_compiler.py:759: size=1360 B, count=5, average=272 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\ipykernel\\iostream.py:346: size=1328 B, count=16, average=83 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\traitlets\\traitlets.py:1514: size=1320 B, count=11, average=120 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\jupyter_client\\session.py:1057: size=1276 B, count=11, average=116 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\jupyter_client\\session.py:100: size=1243 B, count=8, average=155 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\zmq\\sugar\\socket.py:369: size=1152 B, count=5, average=230 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\zmq\\sugar\\socket.py:809: size=1056 B, count=6, average=176 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\threading.py:568: size=864 B, count=16, average=54 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\threading.py:917: size=800 B, count=20, average=40 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\ipykernel\\iostream.py:276: size=776 B, count=8, average=97 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\ipykernel\\compiler.py:91: size=726 B, count=7, average=104 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\asyncio\\events.py:84: size=648 B, count=6, average=108 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\_weakrefset.py:88: size=640 B, count=8, average=80 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\threading.py:1349: size=640 B, count=4, average=160 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\ipykernel\\iostream.py:287: size=632 B, count=7, average=90 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\ipykernel\\iostream.py:154: size=568 B, count=1, average=568 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\IPython\\core\\interactiveshell.py:3104: size=520 B, count=4, average=130 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\threading.py:1027: size=480 B, count=8, average=60 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\IPython\\core\\history.py:782: size=440 B, count=2, average=220 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\ipykernel\\kernelbase.py:775: size=424 B, count=2, average=212 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\IPython\\core\\history.py:836: size=416 B, count=6, average=69 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\zmq\\sugar\\context.py:354: size=416 B, count=4, average=104 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\IPython\\core\\history.py:790: size=416 B, count=1, average=416 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\IPython\\core\\history.py:789: size=416 B, count=1, average=416 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\fnmatch.py:46: size=400 B, count=5, average=80 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\IPython\\core\\history.py:783: size=393 B, count=1, average=393 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\IPython\\core\\interactiveshell.py:3334: size=376 B, count=1, average=376 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\threading.py:262: size=360 B, count=5, average=72 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\threading.py:261: size=360 B, count=5, average=72 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\ipykernel\\ipkernel.py:362: size=360 B, count=1, average=360 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\threading.py:269: size=344 B, count=3, average=115 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\dateutil\\parser\\_parser.py:1195: size=336 B, count=7, average=48 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\threading.py:912: size=320 B, count=8, average=40 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\IPython\\core\\interactiveshell.py:3566: size=320 B, count=5, average=64 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\asyncio\\base_events.py:792: size=312 B, count=3, average=104 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\ipykernel\\iostream.py:527: size=304 B, count=4, average=76 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\IPython\\core\\interactiveshell.py:3517: size=296 B, count=1, average=296 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\tornado\\queues.py:248: size=288 B, count=2, average=144 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\asyncio\\base_events.py:427: size=288 B, count=2, average=144 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\ipykernel\\iostream.py:142: size=288 B, count=1, average=288 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\fnmatch.py:185: size=280 B, count=5, average=56 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\fnmatch.py:52: size=280 B, count=5, average=56 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\ipykernel\\kernelbase.py:534: size=264 B, count=1, average=264 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\ipykernel\\kernelbase.py:435: size=248 B, count=1, average=248 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\ipykernel\\iostream.py:121: size=248 B, count=1, average=248 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\threading.py:894: size=244 B, count=4, average=61 B\n", + ":66: size=240 B, count=5, average=48 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\zmq\\sugar\\socket.py:806: size=240 B, count=3, average=80 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\logging\\__init__.py:1622: size=240 B, count=1, average=240 B\n", + "C:\\Users\\win10\\AppData\\Local\\Temp\\ipykernel_37980\\3835544042.py:7: size=232 B, count=2, average=116 B\n", + "C:\\Users\\win10\\AppData\\Local\\Temp\\ipykernel_37980\\3835544042.py:4: size=232 B, count=2, average=116 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\ipykernel\\kernelbase.py:545: size=232 B, count=1, average=232 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\ipykernel\\zmqshell.py:549: size=224 B, count=3, average=75 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\IPython\\core\\compilerop.py:171: size=216 B, count=3, average=72 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\IPython\\core\\interactiveshell.py:3223: size=208 B, count=4, average=52 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\tornado\\platform\\asyncio.py:235: size=208 B, count=3, average=69 B\n", + "C:\\Users\\win10\\AppData\\Local\\Temp\\ipykernel_37980\\811388706.py:22: size=208 B, count=2, average=104 B\n", + "C:\\Users\\win10\\AppData\\Local\\Temp\\ipykernel_37980\\3581627739.py:22: size=208 B, count=2, average=104 B\n", + "C:\\Users\\win10\\AppData\\Local\\Temp\\ipykernel_37980\\2565588716.py:22: size=208 B, count=2, average=104 B\n", + "C:\\Users\\win10\\AppData\\Local\\Temp\\ipykernel_37980\\2547200138.py:22: size=208 B, count=2, average=104 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\jupyter_client\\session.py:1085: size=208 B, count=1, average=208 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\ipykernel\\kernelbase.py:770: size=208 B, count=1, average=208 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\asyncio\\futures.py:418: size=200 B, count=5, average=40 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\jupyter_client\\session.py:688: size=194 B, count=2, average=97 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\jupyter_client\\session.py:750: size=192 B, count=2, average=96 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\IPython\\core\\interactiveshell.py:3224: size=176 B, count=4, average=44 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\ipykernel\\kernelbase.py:1182: size=173 B, count=2, average=86 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\IPython\\core\\compilerop.py:172: size=168 B, count=6, average=28 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\threading.py:969: size=160 B, count=1, average=160 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\ipykernel\\kernelbase.py:570: size=160 B, count=1, average=160 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\IPython\\core\\interactiveshell.py:3577: size=160 B, count=1, average=160 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\IPython\\core\\interactiveshell.py:3493: size=160 B, count=1, average=160 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\IPython\\core\\interactiveshell.py:3237: size=160 B, count=1, average=160 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\asyncio\\futures.py:394: size=160 B, count=1, average=160 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\asyncio\\futures.py:387: size=160 B, count=1, average=160 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\asyncio\\futures.py:381: size=160 B, count=1, average=160 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\ipykernel\\iostream.py:722: size=144 B, count=2, average=72 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\IPython\\core\\async_helpers.py:151: size=142 B, count=3, average=47 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\threading.py:1016: size=140 B, count=5, average=28 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\IPython\\core\\interactiveshell.py:3509: size=128 B, count=3, average=43 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\jupyter_client\\jsonutil.py:73: size=128 B, count=2, average=64 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\threading.py:121: size=120 B, count=2, average=60 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\traitlets\\traitlets.py:1540: size=120 B, count=2, average=60 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\ipykernel\\kernelbase.py:318: size=120 B, count=2, average=60 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\zmq\\eventloop\\zmqstream.py:652: size=120 B, count=1, average=120 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\inspect.py:265: size=120 B, count=1, average=120 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\asyncio\\base_events.py:755: size=120 B, count=1, average=120 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\threading.py:1020: size=112 B, count=4, average=28 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\ipykernel\\ipkernel.py:770: size=112 B, count=4, average=28 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\jupyter_client\\session.py:989: size=111 B, count=2, average=56 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\zmq\\sugar\\socket.py:755: size=96 B, count=2, average=48 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\IPython\\core\\interactiveshell.py:3375: size=96 B, count=2, average=48 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\warnings.py:189: size=96 B, count=1, average=96 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\IPython\\core\\history.py:805: size=90 B, count=2, average=45 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\jupyter_client\\session.py:996: size=88 B, count=2, average=44 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\tracemalloc.py:551: size=72 B, count=1, average=72 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\tracemalloc.py:528: size=72 B, count=1, average=72 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\tracemalloc.py:477: size=72 B, count=1, average=72 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\tracemalloc.py:420: size=72 B, count=1, average=72 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\tracemalloc.py:312: size=72 B, count=1, average=72 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\tracemalloc.py:225: size=72 B, count=1, average=72 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\tracemalloc.py:220: size=72 B, count=1, average=72 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\tracemalloc.py:215: size=72 B, count=1, average=72 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\tracemalloc.py:212: size=72 B, count=1, average=72 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\tracemalloc.py:203: size=72 B, count=1, average=72 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\tracemalloc.py:187: size=72 B, count=1, average=72 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\tracemalloc.py:172: size=72 B, count=1, average=72 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\tracemalloc.py:155: size=72 B, count=1, average=72 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\tracemalloc.py:151: size=72 B, count=1, average=72 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\tracemalloc.py:147: size=72 B, count=1, average=72 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\tracemalloc.py:66: size=72 B, count=1, average=72 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\tracemalloc.py:52: size=72 B, count=1, average=72 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\tracemalloc.py:37: size=72 B, count=1, average=72 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\tracemalloc.py:13: size=72 B, count=1, average=72 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\threading.py:271: size=72 B, count=1, average=72 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\threading.py:267: size=72 B, count=1, average=72 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\IPython\\core\\history.py:851: size=72 B, count=1, average=72 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\IPython\\core\\history.py:837: size=72 B, count=1, average=72 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\IPython\\core\\history.py:834: size=72 B, count=1, average=72 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\json\\encoder.py:224: size=72 B, count=1, average=72 B\n", + "C:\\Users\\win10\\AppData\\Local\\Temp\\ipykernel_37980\\451043146.py:0: size=72 B, count=1, average=72 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\asyncio\\base_events.py:1935: size=64 B, count=2, average=32 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\zmq\\sugar\\socket.py:810: size=64 B, count=1, average=64 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\zmq\\eventloop\\zmqstream.py:640: size=64 B, count=1, average=64 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\zmq\\eventloop\\zmqstream.py:561: size=64 B, count=1, average=64 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\jupyter_client\\session.py:1053: size=64 B, count=1, average=64 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\ipykernel\\kernelbase.py:721: size=64 B, count=1, average=64 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\ipykernel\\kernelbase.py:69: size=64 B, count=1, average=64 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\ipykernel\\ipkernel.py:384: size=64 B, count=1, average=64 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\ipykernel\\ipkernel.py:383: size=64 B, count=1, average=64 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\ipykernel\\ipkernel.py:381: size=64 B, count=1, average=64 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\ipykernel\\ipkernel.py:294: size=64 B, count=1, average=64 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\ipykernel\\ipkernel.py:291: size=64 B, count=1, average=64 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\decorator.py:232: size=64 B, count=1, average=64 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\IPython\\core\\interactiveshell.py:3303: size=64 B, count=1, average=64 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\IPython\\core\\interactiveshell.py:3300: size=64 B, count=1, average=64 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\tokenize.py:537: size=56 B, count=1, average=56 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\traitlets\\traitlets.py:1534: size=56 B, count=1, average=56 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\jupyter_client\\session.py:1088: size=56 B, count=1, average=56 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\jupyter_client\\session.py:738: size=56 B, count=1, average=56 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\IPython\\core\\interactiveshell.py:3498: size=56 B, count=1, average=56 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\IPython\\core\\history.py:866: size=56 B, count=1, average=56 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\IPython\\core\\completer.py:1120: size=56 B, count=1, average=56 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\selectors.py:323: size=56 B, count=1, average=56 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\jupyter_client\\session.py:200: size=48 B, count=1, average=48 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\IPython\\core\\interactiveshell.py:3505: size=48 B, count=1, average=48 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\IPython\\core\\history.py:835: size=48 B, count=1, average=48 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\concurrent\\futures\\_base.py:330: size=48 B, count=1, average=48 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\zmq\\sugar\\attrsettr.py:29: size=47 B, count=1, average=47 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\IPython\\core\\prefilter.py:317: size=47 B, count=1, average=47 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\jupyter_client\\session.py:603: size=32 B, count=1, average=32 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\ipykernel\\iostream.py:637: size=32 B, count=1, average=32 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\ipykernel\\iostream.py:168: size=32 B, count=1, average=32 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\IPython\\core\\interactiveshell.py:3503: size=32 B, count=1, average=32 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\IPython\\core\\history.py:793: size=32 B, count=1, average=32 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\IPython\\core\\completer.py:2813: size=32 B, count=1, average=32 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\IPython\\core\\completer.py:881: size=32 B, count=1, average=32 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\IPython\\core\\compilerop.py:192: size=32 B, count=1, average=32 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\concurrent\\futures\\_base.py:421: size=32 B, count=1, average=32 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\asyncio\\base_events.py:758: size=32 B, count=1, average=32 B\n", + "e:\\UDemy Final\\python\\venv\\Lib\\site-packages\\IPython\\core\\interactiveshell.py:3485: size=8 B, count=1, average=8 B\n" + ] + } + ], + "source": [ + "main()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.0" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/16-Multithreading and Multiprocessing/advance_multi_processing.py b/16-Multithreading and Multiprocessing/advance_multi_processing.py new file mode 100644 index 000000000..2544a09b9 --- /dev/null +++ b/16-Multithreading and Multiprocessing/advance_multi_processing.py @@ -0,0 +1,17 @@ +### Multiprocessing with ProcessPoolExecutor + +from concurrent.futures import ProcessPoolExecutor +import time + +def square_number(number): + time.sleep(2) + return f"Square: {number * number}" + +numbers=[1,2,3,4,5,6,7,8,9,11,2,3,12,14] +if __name__=="__main__": + + with ProcessPoolExecutor(max_workers=3) as executor: + results=executor.map(square_number,numbers) + + for result in results: + print(result) \ No newline at end of file diff --git a/16-Multithreading and Multiprocessing/advance_multi_threading.py b/16-Multithreading and Multiprocessing/advance_multi_threading.py new file mode 100644 index 000000000..89ca2eec3 --- /dev/null +++ b/16-Multithreading and Multiprocessing/advance_multi_threading.py @@ -0,0 +1,16 @@ +### Multithreading With Thread Pool Executor + +from concurrent.futures import ThreadPoolExecutor +import time + +def print_number(number): + time.sleep(1) + return f"Number :{number}" + +numbers=[1,2,3,4,5,6,7,8,9,0,1,2,3] + +with ThreadPoolExecutor(max_workers=3) as executor: + results=executor.map(print_number,numbers) + +for result in results: + print(result) \ No newline at end of file diff --git a/16-Multithreading and Multiprocessing/factorial_multi_processing.py b/16-Multithreading and Multiprocessing/factorial_multi_processing.py new file mode 100644 index 000000000..c4b1548d4 --- /dev/null +++ b/16-Multithreading and Multiprocessing/factorial_multi_processing.py @@ -0,0 +1,40 @@ +''' +Real-World Example: Multiprocessing for CPU-bound Tasks +Scenario: Factorial Calculation +Factorial calculations, especially for large numbers, +involve significant computational work. Multiprocessing +can be used to distribute the workload across multiple +CPU cores, improving performance. + +''' + +import multiprocessing +import math +import sys +import time + +# Increase the maximum number of digits for integer conversion +sys.set_int_max_str_digits(100000) + +## function to compute factorials of a given number + +def computer_factorial(number): + print(f"Computing factorial of {number}") + result=math.factorial(number) + print(f"Factorial of {number} is {result}") + return result + +if __name__=="__main__": + numbers=[5000,6000,700,8000] + + start_time=time.time() + + ##create a pool of worker processes + with multiprocessing.Pool() as pool: + results=pool.map(computer_factorial,numbers) + + end_time=time.time() + + print(f"Results: {results}") + print(f"Time taken: {end_time - start_time} seconds") + diff --git a/16-Multithreading and Multiprocessing/multi_processing.py b/16-Multithreading and Multiprocessing/multi_processing.py new file mode 100644 index 000000000..70f4957a2 --- /dev/null +++ b/16-Multithreading and Multiprocessing/multi_processing.py @@ -0,0 +1,35 @@ +## PRocesses that run in parallel +### CPU-Bound Tasks-Tasks that are heavy on CPU usage (e.g., mathematical computations, data processing). +## PArallel execution- Multiple cores of the CPU + +import multiprocessing + +import time + +def square_numbers(): + for i in range(5): + time.sleep(1) + print(f"Square: {i*i}") + +def cube_numbers(): + for i in range(5): + time.sleep(1.5) + print(f"Cube: {i * i * i}") + +if __name__=="__main__": + + ## create 2 processes + p1=multiprocessing.Process(target=square_numbers) + p2=multiprocessing.Process(target=cube_numbers) + t=time.time() + + ## start the process + p1.start() + p2.start() + + ## Wait for the process to complete + p1.join() + p2.join() + + finished_time=time.time()-t + print(finished_time) \ No newline at end of file diff --git a/16-Multithreading and Multiprocessing/multi_threading.py b/16-Multithreading and Multiprocessing/multi_threading.py new file mode 100644 index 000000000..4f2ca6550 --- /dev/null +++ b/16-Multithreading and Multiprocessing/multi_threading.py @@ -0,0 +1,33 @@ +### Multithreading +## When to use Multi Threading +###I/O-bound tasks: Tasks that spend more time waiting for I/O operations (e.g., file operations, network requests). +### Concurrent execution: When you want to improve the throughput of your application by performing multiple operations concurrently. + +import threading +import time + +def print_numbers(): + for i in range(5): + time.sleep(2) + print(f"Number:{i}") + +def print_letter(): + for letter in "abcde": + time.sleep(2) + print(f"Letter: {letter}") + +##create 2 threads +t1=threading.Thread(target=print_numbers) +t2=threading.Thread(target=print_letter) + +t=time.time() +## start the thread +t1.start() +t2.start() + +### Wait for the threads to complete +t1.join() +t2.join() + +finished_time=time.time()-t +print(finished_time) \ No newline at end of file diff --git a/16-Multithreading and Multiprocessing/webscrapping_multi_threading.py b/16-Multithreading and Multiprocessing/webscrapping_multi_threading.py new file mode 100644 index 000000000..06eca14bc --- /dev/null +++ b/16-Multithreading and Multiprocessing/webscrapping_multi_threading.py @@ -0,0 +1,48 @@ +''' +Real-World Example: Multithreading for I/O-bound Tasks +Scenario: Web Scraping +Web scraping often involves making numerous network requests to +fetch web pages. These tasks are I/O-bound because they spend a lot of +time waiting for responses from servers. Multithreading can significantly +improve the performance by allowing multiple web pages to be fetched concurrently. + +''' + +''' + +https://python.langchain.com/v0.2/docs/introduction/ + +https://python.langchain.com/v0.2/docs/concepts/ + +https://python.langchain.com/v0.2/docs/tutorials/ +''' + +import threading +import requests +from bs4 import BeautifulSoup + +urls=[ +'https://python.langchain.com/v0.2/docs/introduction/', + +'https://python.langchain.com/v0.2/docs/concepts/', + +'https://python.langchain.com/v0.2/docs/tutorials/' + +] + +def fetch_content(url): + response=requests.get(url) + soup=BeautifulSoup(response.content,'html.parser') + print(f'Fetched {len(soup.text)} characters from {url}') + +threads=[] + +for url in urls: + thread=threading.Thread(target=fetch_content,args=(url,)) + threads.append(thread) + thread.start() + +for thread in threads: + thread.join() + +print("All web pages fetched") \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 24ca97ad3..07b0ec227 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,9 @@ ipykernel -numpy \ No newline at end of file +numpy +pandas +matplotlib +seaborn +flask +memory_profiler +streamlit +scikit-learn