Задать вопрос
  • Скрипт на Python работает медленно, как ускорить?

    1HAWK1
    @1HAWK1
    import requests
    import pandas as pd
    from concurrent.futures import ThreadPoolExecutor, as_completed
    
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36"
    }
    
    options = {
        'muteHttpExceptions': True,
        'followRedirects': False
    }
    
    def check_url(url):
        resp = f'https://www.google.ru/search?q=site:{url}'
        response = requests.get(resp, options, headers=headers).text
        if "ничего не найдено" in response:
            return url, "Не в индексе"
        else:
            return url, "В индексе"
    
    def main():
        with open('all-website-url.txt', encoding="utf-8") as f:
            urls = [line.strip() for line in f]
    
        results = []
    
        with ThreadPoolExecutor() as executor:
            futures = [executor.submit(check_url, url) for url in urls]
            for future in as_completed(futures):
                url, status = future.result()
                results.append({"URL": url, "Статус": status})
                print(f"{url}: {status}")
    
        df = pd.DataFrame(results)
        df.to_excel('./googlecheckindex.xlsx', index=False)
    
    if __name__ == '__main__':
        main()
    Ответ написан
  • Как решить проблему при установке Php пакетов в centos7?

    1HAWK1
    @1HAWK1
    Сообщение об ошибке указывает на то, что в вашей системе отсутствуют два расширения PHP, dom и xml, которые требуются для пакетов, которые вы пытаетесь установить. Вот как вы можете установить эти расширения в CentOS 7:

    Установите репозиторий EPEL:
    sudo yum install epel-release

    Установите репозиторий Remi, который содержит обновленные версии PHP и его расширений:
    sudo yum install rpms.remirepo.net/enterprise/remi-release-7.rpm

    Установите PHP и необходимые расширения:
    sudo yum install php php-dom php-xml

    Перезапустите веб-сервер Apache:
    sudo systemctl restart httpd

    После выполнения этих шагов попробуйте снова установить пакеты с помощью Composer. Это должно устранить ошибки, связанные с отсутствующими расширениями.
    Ответ написан
    3 комментария
  • Как создавать массивы с неограниченной вложенностью в c++?

    1HAWK1
    @1HAWK1
    В C++ невозможно создавать массивы с неограниченной вложенностью, поскольку размер массива должен быть известен во время компиляции. Однако можно создавать вложенные массивы с фиксированным числом измерений, а затем использовать указатели или динамическое выделение памяти для имитации неограниченной вложенности. Вот два подхода:

    1) Использование указателей:
    Одним из способов создания массивов с неограниченной вложенностью является использование указателей для создания массива указателей на массивы. Вот пример:

    int*** nestedArray;
    nestedArray = new int**[10]; // create an array of 10 pointers to int**
    for (int i = 0; i < 10; i++) {
        nestedArray[i] = new int*[5]; // create an array of 5 pointers to int* for each of the 10 int**
        for (int j = 0; j < 5; j++) {
            nestedArray[i][j] = new int[3]; // create an array of 3 int for each of the 50 int*
        }
    }


    В этом примере мы создаем массив из 10 указателей на массивы из 5 указателей на массивы из 3 целых чисел в каждом. Вы можете продолжить вложение массивов, добавив дополнительные уровни указателей.

    2) Использование динамического выделения памяти:
    Другой способ создания массивов с неограниченной вложенностью — использование динамического выделения памяти с оператором new. Вот пример:

    int dims[] = {10, 5, 3}; // an array of the dimensions of the nested arrays
    int* arr = new int[dims[0] * dims[1] * dims[2]]; // create a one-dimensional array with the total number of elements
    int*** nestedArray = new int**[dims[0]]; // create an array of pointers to arrays of pointers
    for (int i = 0; i < dims[0]; i++) {
        nestedArray[i] = new int*[dims[1]]; // create an array of pointers to arrays for each of the pointers in the first level
        for (int j = 0; j < dims[1]; j++) {
            nestedArray[i][j] = arr + (i * dims[1] * dims[2]) + (j * dims[2]); // assign each pointer to the appropriate element in the one-dimensional array
        }
    }


    В этом примере мы сначала создаем одномерный массив с общим количеством элементов во вложенных массивах. Затем мы создаем массив указателей на массивы указателей и присваиваем каждому указателю соответствующий элемент в одномерном массиве. Вы можете продолжить вложение массивов, соответствующим образом изменив массив измерений и указатели. Обратите внимание, что вам нужно использовать оператор удаления, чтобы освободить память, выделенную с помощью new.
    Ответ написан
    Комментировать
  • Как добавлять данные в список при использовании multiprocessing?

    1HAWK1
    @1HAWK1
    Для работы с потоками советую использовать заготовку (брал на каком-то сайте):
    import time
    from threading import Thread
    def sleepMe(i):
    
        print("Поток %i засыпает на 5 секунд.\n" % i)
        time.sleep(5)
        print("Поток %i сейчас проснулся.\n" % i)
    
    for i in range(10):
        th = Thread(target=sleepMe, args=(i, ))
        th.start()
    Ответ написан