{"id":23103304,"url":"https://github.com/themusharraf/python-advanced","last_synced_at":"2025-04-03T21:27:37.170Z","repository":{"id":209889985,"uuid":"725197674","full_name":"themusharraf/Python-Advanced","owner":"themusharraf","description":"Python-ga chuqurroq sho'ng'ing va kodlash mahoratingizni oshiring.📡","archived":false,"fork":false,"pushed_at":"2024-10-21T05:30:02.000Z","size":95,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-02-09T09:29:08.568Z","etag":null,"topics":["python","python-core","python3"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/themusharraf.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-11-29T16:31:32.000Z","updated_at":"2024-10-21T05:30:06.000Z","dependencies_parsed_at":"2025-02-09T09:36:25.060Z","dependency_job_id":null,"html_url":"https://github.com/themusharraf/Python-Advanced","commit_stats":null,"previous_names":["themusharraf/advanced_python"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/themusharraf%2FPython-Advanced","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/themusharraf%2FPython-Advanced/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/themusharraf%2FPython-Advanced/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/themusharraf%2FPython-Advanced/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/themusharraf","download_url":"https://codeload.github.com/themusharraf/Python-Advanced/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247081231,"owners_count":20880395,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["python","python-core","python3"],"created_at":"2024-12-17T00:13:30.003Z","updated_at":"2025-04-03T21:27:37.153Z","avatar_url":"https://github.com/themusharraf.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Advanced Python\n\n## Python-ga chuqurroq sho'ng'ing va kodlash mahoratingizni oshiring. \n\n## Python generatori:\n\n- Iterator obyektini qaytaruvchi funksiyaning maxsus turi.\n- Qo'ng'iroq qiluvchi tomonidan so'ralganda birma-bir qiymatlar ketma-ketligini ishlab chiqaradi.\n- Generatorlar ijroni to'xtatib turish va ketma-ketlikda keyingi qiymatni qaytarish uchun \"yield\" kalit so'zi yordamida\n  aniqlanadi.\n- Bu xotiradan yanada samarali foydalanish imkonini beradi va cheksiz ketma-ketlikni yaratishi mumkin.\n\n```python   \n'''  \nIterator\n''' \nimport time\n\n\ndef answer():\n    result = []\n\n    time.sleep(3)\n    result.append(14)\n\n    time.sleep(3)\n    result.append(44)\n\n    time.sleep(3)\n    result.append(75)\n\n    return result\n\n\nfor x in answer():\n    print(x)\n```\n```python\n'''\nGenerator\n'''\nimport time\n\n\ndef answer():\n    time.sleep(3)\n    yield 14\n\n    time.sleep(3)\n    yield 44\n\n    time.sleep(3)\n    yield 75\n\n\nfor x in answer():\n    print(x)\n```\nhttps://github.com/themusharraf/Advanced_Python/assets/122869450/4813cbf1-54ad-4b07-8954-4f9eea043745\n\n```python\n'''\nGenerator range()\n'''\nimport time\n\n\n# def answer():\n#     while True:\n#         time.sleep(3)\n#         yield 75\n#\n#\n# for x in answer():\n#     print(x * x)\n\ndef reverse(nums: list):\n    n = len(nums)\n    for x in range(n - 1, -1, -1):\n        yield nums[x]\n\n\n# for x in reverse([1, 2, 3]):\n#     print(x)\n# print(list(reverse([1, 2, 3])))\n\niterator = iter(reverse([1, 2, 3, 4, 5]))\nwhile True:\n    try:\n        n = next(iterator)\n    except StopIteration:\n        break\n    print(n)\n\nfor r in reverse([1, 2, 3, 4, 5]):\n    print(r)\n\nfor x in range(100000000):  # range() generator\n    time.sleep(1)\n    print(x)\n```\n\n# Decorator\n\n#### Dekoratorlar yuqori darajadagi funktsiyalarni chaqirish uchun oddiy sintaksisni ta'minlaydi. Ta'rifga ko'ra, dekorator boshqa funktsiyani qabul qiladigan va ikkinchi funktsiyaning harakatini aniq o'zgartirmasdankengaytiradigan funktsiyadir.Bu chalkash tuyuladi, lekin aslida unday emas, ayniqsa dekorativlar qanday ishlashiga oid bir nechta misollarni ko'rganingizdan keyin. Ushbu maqoladagi barcha misollarni bu erda topishingiz mumkin.\n\n```python\n  def hello(name):\n    # ichki funksiya\n    def get_name():\n        return f\"Hello, {name}!\"\n\n    # ichki funksiyani qaytarish\n    return get_name\n\n\nhello_func = hello(\"Sarvar\")\nprint(hello_func())\n```\n\n\u003cimg width=\"539\" alt=\"image\" src=\"https://github.com/themusharraf/Advanced_Python/assets/122869450/7ad2db79-74a5-4660-a414-dcfef0edf978\"\u003e\n\n### Decorator funksiya argument sifatida funksiya qabul qiladi.\n\n```python\n   def make_decorator(func):\n    def inner():\n        # Ichki funksiya orqali func xususiyatlarini o'zgartirishimiz mumkin\n        print(\"Dekorator ishlayapti\")\n\n        func()\n\n    # Ichki funksiya qaytariladi\n    return inner\n\n\ndef my_func():\n    print(\"Dekorator uchun ishlatiladigan funksiya\")\n\n\ndecorated_func = make_decorator(my_func)\ndecorated_func()\n\n# Dekorator ishlayapti\n# Dekorator uchun ishlatiladigan funksiya\n```\n\n### Bitta funksiyada bir nechta decorator ishlatishimiz ham mumkin, bunda birinchisidan boshlab decoratorlar ishlab keladi.\n\n```python\n\ndef divide_decorator(func):\n    def divide_inner(a, b):\n        try:\n            return func(a, b)\n        except ZeroDivisionError:\n            print(\"Nolga bo'lish mumkin emas!\")\n\n    return divide_inner\n\n\ndef second_zero(func):  # zero 0 - \u003e 1 function\n    def inner(a, b):\n        if b == 0:\n            b += 1\n        return func(a, b)\n\n    return inner\n\n\n@second_zero\n\n\n@divide_decorator\ndef divider(a, b):\n    return a / b\n\n\nprint(divider(10, 5))  # 2.0\nprint(divider(10, 0))  # 10.0\n```\n```python\n'''\nDecorator\n'''\nimport time\n\n\n# def add(a, b):\n#     return a + b\n#\n#\n# # print(add.__call__(1, 2))\n# # print(add(1, 2))\n#\n#\n# def calc(func, a, b):\n#     return func(a, b)\n#\n#\n# result = calc(add, 1, 4)\n# print(result)\n\n# def adder(n):\n#     def inner(m):\n#         return 5 + m\n#     return inner\n#\n#\n# add_5 = adder(5)\n\n# def func():\n#     def another_func():\n#         return 1\n#     return another_func\n#\n# print(func()())\n\n# def do():\n#     started = time.time()\n#     print(started)\n#     time.sleep(3)\n#     print(\"done\")\n#     finished = time.time()\n#     print(finished)\n#     print(f\"took {finished - started} seconds\")\n#\n#\n# do()\n\n# def do1():\n#     started = time.time()\n#     print(started)\n#     time.sleep(3)\n#     print(\"done\")\n#     finished = time.time()\n#     print(finished)\n#     print(f\"took {finished - started} seconds\")\n#\n#\n# do1()\n\n# def timer(func):\n#     started = time.time()\n#     func()\n#     fnished = time.time()\n#     print(f\"took {fnished - started} seconds\")\n#\n# timer(do())\n# timer(do2())\n\n# not called\n\n# def timer(func):\n#     def inner():\n#         started = time.time()\n#         func()\n#         fnished = time.time()\n#         print(f\"took {fnished - started} seconds\")\n#\n#     return inner\n\n\n#\n#\n# # do = timer(do())\n# # do2 timer(do2())\n#\n# do()\n# do2()\n\n# @timer\n# def dos():\n#     time.sleep(3)\n#     print(\"done\")\n\n# def star(func):\n#     def inner():\n#         print(\"*\" * 12)\n#         func()\n#         print(\"*\" * 12)\n#\n#     return inner\n# def presnet(func):\n#     def inner():\n#         print(\"%\" * 12)\n#         func()\n#         print(\"%\" * 12)\n#\n#     return inner\n\n#\n# @star\n# @presnet\n# def hello():\n#     print(\"Hello World\")\n#\n#\n# hello()\n\n# def wrap(char):\n#     def wrapper(func):\n#         def inner():\n#             print(char * 12)\n#             func()\n#             print(char * 12)\n#\n#         return inner\n#\n#     return wrapper\n#\n#\n# @wrap(\"%\")\n# @wrap(\"*\")\n# def hello():\n#     print(\"Hello World\")\n#\n#\n# hello()\n\n'''\nlog nomli dekorator yarating, u qaysi funksiya qachon chaqirilganini va qachon funksiya tugagani vaqtnini ekranga chiqarsin. Vaqtni formatlashni https://strftime.org/ saytidan ko'rishingiz mumkin.\n\n\nMisol:\n@log\ndef hello():\n     print(\"hello\")\n\nhello()\n\nOutput:\n- called function: hello at 8:43:35\nhello\n- finished function: hello at 8:43:36\n\n'''\n\n```\n# Context Mangers\n```python\n'''Context Managers\n'''\n# with open('file.txt', 'w') as file:\n#     file.write(\"Hello\")\n#\n# file = open('file,txt', 'w')\n# file.write('All Nc')\n# file.close()\n\n# class FileOpener:\n#     def __init__(self, filename, mode='r'):\n#         self.filename = filename,\n#         self.mode = mode\n#         self.opened_file = None\n#\n#     def __enter__(self):\n#         print(\"Entered\")\n#         return 1\n#\n#     def __exit__(self, exc_type, exc_val, exc_tb):\n#         print('Exited')\n#\n#\n# with FileOpener('file,txt', 'w') as file:\n#     print('file', file)\n#     print('nima_dir boldi')\n\n# class FileOpener:\n#     def __init__(self, filename, mode='r'):\n#         self.filename = filename\n#         self.mode = mode\n#         self.opened_file = None\n#\n#     def __enter__(self):\n#         print(\"Entered\")\n#         self.opened_file = open(self.filename, self.mode)\n#         return self.opened_file\n#\n#     def __exit__(self, exc_type, exc_val, exc_tb):\n#         print('Exited')\n#         if self.opened_file:\n#             self.opened_file.close()\n#\n#\n# with FileOpener('file.txt', 'w') as file:\n#     print('file', file)\n#     file.write('All Nc')\n#     raise Exception\n#     print('nima_dir boldi')\n\n\nfrom contextlib import contextmanager\n\n\n@contextmanager\ndef file_opener(filename, mode):\n    file = open(filename, mode)\n    print('open file')\n    try:\n        yield file\n    finally:\n        file.close()\n        print('closed file')\n\n\nwith file_opener('files.txt', 'w') as file:\n    print('file', file)\n    raise Exception\n\n\n'''\nlog nomli kontekst meneger yarating, u qaysi kontext qachon ochilganini va qachon  kontext yopilganini vaqtnini ekranga chiqarsin.\n\nMisol:\n\nwith log():\n     print(\"hello\")\n\nOutput:\n- context manager opened at 8:43:35\nhello\n- context manager closed at 8:43:36\n'''\n```\n# Typing modul\n\n## Asosiy turlar\n\n- `int`: Butun son\n- `float`: O'nli son\n- `bool`: Mantiqiy qiymat (True/False)\n- `str`: Matn\n\n## Ro'yxatlar va Lug'atlar\n\n- `List[int]`: Butun sonlardan iborat ro'yxat\n- `Dict[str, int]`: Kalitlari matn, qiymatlari butun son bo'lgan lug'at\n\n## Union\n\n### O'zgaruvchining bir nechta turda bo'lishi mumkinligini belgilash uchun Union dan foydalaniladi.\n\n```python\nfrom typing import Union\n\n\ndef foo(x: Union[int, str]) -\u003e None:\n    print(x)\n```\n\n## Optional\n\n### O'zgaruvchi ma'lum bir turda yoki None bo'lishi mumkinligini belgilash uchun Optional dan foydalaniladi.\n\n```python\nfrom typing import Optional\n\n\ndef foo(x: Optional[int]) -\u003e None:\n    print(x)\n```\n\n## Tuple\n\n### Aniq uzunlikdagi va ma'lum turlardagi elementlardan iborat tuple belgilash uchun Tuple dan foydalaniladi.\n\n```python\nfrom typing import Tuple\n\n\ndef foo(x: Tuple[int, float, str]) -\u003e None:\n    print(x)\n```\n\n## Any\n\n### Har qanday turdagi bo'lishi mumkin bo'lgan o'zgaruvchi belgilash uchun Any dan foydalaniladi.\n\n```python\nfrom typing import Any\n\n\ndef foo(x: Any) -\u003e None:\n    print(x)\n```\n\n## Type Aliases\n\n### Murakkab turlarni o'qilishi osonroq qilish uchun tur ta'riflari ishlatilishi mumkin.\n\n```python\nfrom typing import List\n\nVector = List[float]\n\n\ndef foo(v: Vector) -\u003e None:\n    print(v)\n```\n\n## Misol\n\n```python\nfrom typing import List, Dict, Union, Optional\n\n\ndef process_data(data: List[Dict[str, Union[int, float]]]) -\u003e Optional[float]:\n    if not data:\n        return None\n    return sum(item['value'] for item in data) / len(data)\n```\n\n## Xulosa\n\n### typing moduli Python kodlaringizni tushunarliroq, qulayroq va xatolarni kamaytirish uchun juda foydali. Bu modul bilan yozilgan kodlar kelajakdagi o'zgarishlar uchun yanada aniqroq tuzilmani ta'minlaydi.\n\n# Unpacking and packing\n\n## Unpacking va packing - Python dasturlash tilida juda foydali texnikalar bo‘lib, ular ob’ektlarni ochish va yig‘ish jarayonlarini osonlashtiradi.\n\n## Unpacking\n\n### Unpacking ob’ektni bir necha qismlarga ajratish va har bir qismni alohida o‘zgaruvchiga tayinlash imkonini beradi. Bu ko‘pincha ro‘yxatlar va tuple (to‘plam)lar bilan ishlatiladi.\n\n## Tuple bilan unpacking\n\n```python\nmy_tuple = (1, 2, 3)\na, b, c = my_tuple\nprint(a)  # 1\nprint(b)  # 2\nprint(c)  # 3\n```\n\n## Ro'yxat bilan unpacking\n\n```python\nmy_list = [4, 5, 6]\nx, y, z = my_list\nprint(x)  # 4\nprint(y)  # 5\nprint(z)  # 6\n```\n\n## Funksiya chaqirilishi natijasini unpacking qilish\n\n```python\ndef get_coordinates():\n    return (50.4501, 30.5234)\n\n\nlat, lon = get_coordinates()\nprint(f\"Latitude: {lat}, Longitude: {lon}\")\n```\n\n## Packing\n\n### Packing esa aksincha, bir nechta qiymatlarni bitta tuple yoki ro‘yxatga yig‘ish imkonini beradi.\n\n## Tuple bilan packing\n\n```python\na, b, c = 1, 2, 3\nmy_tuple = (a, b, c)\nprint(my_tuple)  # (1, 2, 3)\n```\n\n## Ro'yxat bilan packing\n\n```python\nx, y, z = 4, 5, 6\nmy_list = [x, y, z]\nprint(my_list)  # [4, 5, 6]\n```\n\n## Funksiya orqali packing\n\n```python\ndef create_point(x, y, z):\n    return (x, y, z)\n\n\npoint = create_point(7, 8, 9)\nprint(point)  # (7, 8, 9)\n```\n\n# *args va **kwargs bilan ishlash\n\n### Unpacking va packing ko‘pincha *args va **kwargs bilan birgalikda ishlatiladi.\n\n### - `*args` funksiyaga kiritilgan argumentlarni tuple ko‘rinishida qabul qiladi,\n\n### - `**kwargs` esa kalit-qiymat juftliklarini dictionary ko‘rinishida qabul qiladi.\n\n```python\ndef my_function(*args, **kwargs):\n    print(args)\n    print(kwargs)\n\n\nmy_function(1, 2, 3, name=\"Alice\", age=30)\n\n# (1, 2, 3)\n# {'name': 'Alice', 'age': 30}\n\n```\n\n## Unpacking va packingni birgalikda ishlatish\n\n```python\ndef calculate_sum(a, b, c):\n    return a + b + c\n\n\nmy_numbers = [1, 2, 3]\nresult = calculate_sum(*my_numbers)\nprint(result)  # 6\n\n\n# **kwargs bilan unpacking # noqa\ndef print_info(name, age):\n    print(f\"Name: {name}, Age: {age}\")\n\n\ninfo = {\"name\": \"Alice\", \"age\": 30}\nprint_info(**info)\n# Name: Alice, Age: 30\n```\n### Python'da hashable va unhashable tushunchalari muhim ahamiyatga ega, ayniqsa, ma'lumotlar tuzilmalari va lug'atlar bilan ishlashda.\n\n### Hashable (Hashlanadigan)\n- Hashable obyektlar - bu o'zlarining hash() qiymatiga ega bo'lgan obyektlar. Bu qiymat doimiy bo'lib, obyektning umri davomida o'zgarmaydi. Hashable obyektlarni lug'at (dictionary) kalitlari yoki set elementlari sifatida ishlatish mumkin.\n\n### Hashable obyektlar:\n\n1. Integer (int)\n2. Float (float)\n3. String (str)\n4. Tuple (tuple), agar uning ichidagi barcha elementlar ham hashable bo'lsa\n5. Frozen set (frozenset)\nMisol:\n```python\nhash(42)  # Integer hashable\nhash(\"hello\")  # String hashable\nhash((1, 2, 3))  # Tuple hashable\n```\n---\n### Unhashable (Hashlanmaydigan)\n- Unhashable obyektlar - bu o'zlarining hash() qiymatiga ega bo'lmagan obyektlar. Bunday obyektlarni lug'at kalitlari yoki set elementlari sifatida ishlatib bo'lmaydi, chunki ular mutable (o'zgartirilishi mumkin) va ularning qiymatlari o'zgarishi mumkin.\n\n### Unhashable obyektlar:\n\n1. List (list)\n2. Dictionary (dict)\n3. Set (set)\n4. Tuple (tuple), agar uning ichidagi biror element unhashable bo'lsa\nMisol:\n```python\nhash([1, 2, 3])  # List unhashable\nhash({1: \"one\", 2: \"two\"})  # Dictionary unhashable\nhash({1, 2, 3})  # Set unhashable\n```\n### Nima uchun bu muhim?\nHashable obyektlar ma'lumotlar tuzilmalarida, ayniqsa lug'atlar va setlarda, samarali indekslash va izlashni ta'minlaydi. Unhashable obyektlar esa o'zgaruvchan bo'lgani uchun ularni kalit yoki element sifatida ishlatish xavfli, chunki bu obyektlar o'zgarganda hash qiymati ham o'zgaradi va noto'g'ri xatti-harakatlar yuzaga kelishi mumkin.\n\n- Yaxshi dasturlash amaliyotlaridan biri sifatida, kalit yoki set elementi sifatida hashable obyektlarni tanlash kerak, bu esa kodingizni ishonchli va samarali qiladi.\n\n---\n\n### Django'da select_related va prefetch_related optimizatsiya metodlari bo'lib, ular ORM (Object-Relational Mapping) so'rovlarining samaradorligini oshirish uchun ishlatiladi. \n- Ular har xil turdagi ma'lumotlar bazasi so'rovlarini oldindan yuklab olish orqali so'rovlar sonini kamaytiradi, bu esa bajarilish vaqtini tezlashtiradi.\n\n### select_related\nNimani ishlatadi: select_related odatda ForeignKey yoki OneToOneField maydonlar bilan ishlatiladi.\nQanday ishlaydi: Bu metod bog'langan modelni JOIN operatori yordamida bitta so'rovda oladi. Bu esa bog'liq bo'lgan ma'lumotlarni olish uchun kerak bo'ladigan alohida so'rovlar sonini kamaytiradi.\nQachon ishlatish kerak: Agar sizda ForeignKey yoki OneToOneField bilan bog'langan ma'lumotlar mavjud bo'lsa va siz ularga tez-tez murojaat qilmoqchi bo'lsangiz, select_relatedni ishlatishingiz kerak.\nMisol:\n\n# Model example\n```python\nclass Author(models.Model):\n    name = models.CharField(max_length=100)\n\nclass Book(models.Model):\n    title = models.CharField(max_length=100)\n    author = models.ForeignKey(Author, on_delete=models.CASCADE)\n\n# Query with select_related\nbooks = Book.objects.select_related('author').all()\n\nfor book in books:\n    print(book.author.name)  # Author ma'lumotlari bitta JOIN so'rovda keladi\n```\n### prefetch_related\nNimani ishlatadi: prefetch_related ManyToManyField yoki ForeignKey maydonlar uchun ishlatiladi, lekin u select_relateddan farqli o'laroq, so'rovlarni ikkita alohida so'rov sifatida yuboradi, keyin esa natijalarni Python tarafida bog'laydi.\nQanday ishlaydi: U bog'langan ob'ektlarni alohida so'rovda yuklab oladi va asosiy so'rov bilan natijalarni bog'laydi. Bu katta hajmdagi bog'langan ob'ektlar mavjud bo'lgan holatlarda yaxshi ishlaydi.\nQachon ishlatish kerak: Agar sizda ManyToMany yoki katta hajmdagi ForeignKey bog'lanishlar mavjud bo'lsa, prefetch_relatedni ishlatish samarali bo'ladi.\nMisol:\n\n# Model example\n```python\nclass Book(models.Model):\n    title = models.CharField(max_length=100)\n    authors = models.ManyToManyField(Author)\n\n#Query with prefetch_related\nbooks = Book.objects.prefetch_related('authors').all()\n\nfor book in books:\n    for author in book.authors.all():\n        print(author.name)  # Authors alohida so'rovda yuklab olinadi\n```\n### Xulosa\n- `select_related` bir-to-bir yoki bir-to-ko'p bog'lanishlar uchun optimal va bitta so'rovda ma'lumotlarni olib keladi.\n- `prefetch_related` ko'p-to-ko'p bog'lanishlar yoki katta hajmdagi bog'langan ob'ektlar uchun ishlatiladi va so'rovlar sonini kamaytiradi, lekin ularni alohida-alohida bajaradi.\n\n\n## Python Queue Example\n```python\nimport queue\nimport threading\nimport time\n\n# Telegram botiga yuborilayotgan buyruqlar navbati (queue)\ncommand_queue = queue.Queue()\n\n# Bu funksiya botga kelayotgan buyruqlarni navbatga qo'shadi\ndef add_command_to_queue(command):\n    print(f\"Buyruq qo'shildi: {command}\")\n    command_queue.put(command)\n\n# Bu funksiya navbatdagi buyruqlarni ketma-ket bajaradi\ndef process_commands():\n    while True:\n        # Navbatdan buyruqni olish\n        command = command_queue.get()\n        if command is None:\n            break\n        print(f\"Buyruqni bajarish: {command}\")\n        time.sleep(2)  # Buyruqni bajarishga sarflanadigan vaqt\n        command_queue.task_done()\n        print(f\"Buyruq bajarildi: {command}\")\n\n# Buyruqlarni qabul qilish uchun yangi threading\nthreading.Thread(target=process_commands, daemon=True).start()\n\n# Botga kelayotgan buyruqlar\nadd_command_to_queue(\"/start\")\nadd_command_to_queue(\"/help\")\nadd_command_to_queue(\"/settings\")\n\n# Buyruqlar navbatda bajarilguncha kutish\ncommand_queue.join()\n\nprint(\"Barcha buyruqlar bajarildi!\")```\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthemusharraf%2Fpython-advanced","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthemusharraf%2Fpython-advanced","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthemusharraf%2Fpython-advanced/lists"}