• Почему Python multiprocessing нестабилен?

    @nirvimel
    Хорошо, что вы указали в тегах Windows, это все объясняет. Под Windows нет простого способа "раздвоиться" процессу при вызове multiprocessing.Process, поэтому осуществляется очень сложная эмуляция этого поведения. При этом функция target выдирается из модуля, запускается в отдельном интерпретаторе, а все параметры сереализуются передаются и десереализуются перед вызовом target, при этом инициализация модуля в новом интерпретаторе выполняется частично (инициализируется только глобальный контекс). Подробнее об этом, например, тут, есть еще одна очень хорошая статья где подробно рассмотрен этот механизм, но сейчас не найду ссылку.

    Коротко о том, как готовить multiprocessing под Windows:
    1. Разделять процессы (вызов multiprocessing.Process()) как можно раньше в коде.
    2. По возможности избегать инициализации любых ресурсов и глобальных переменных до разделения. Учитывайте, что этот код выполняется во всех процессах независимо и может давать кучу сторонних эффектов.
    3. Не передавать через args никаких сложных объектов с "поведением" (кроме объектов из самого multiprocessing, он сам знает как их правильно передавать), только голые данные (примитивы или объекты состоящие только из примитивов), которые сериализуются без сторонних эффектов.
    4. Создавать дочерние процессы один раз, и на протяжении всего времени работать с ними посредством обмена сообщениями через Pipe/Queue. Не порождать новые процессы в цикле вычислений в момент "когда понадобятся".
    5. Queue при попытке записи/чтения может блокировать процесс, если при этом происходит запись/чтения в/из нее в другом процессе. (Думаю, именно это и происходит в коде в вопросе).
    6. Лучше использовать Pipe, который в худшем случае блокирует один процесс, а не все, как Queue.
    7. При создании процесса можно передавать ему два Pipe (input одного + output другого), в вызывающем процессе хранить соответствующие им коннекторы и только при помощи их общаться с дочерним процессом.
    8. Можно не делать process.join(), а просто читать результаты из output Pipe, они прочтутся только после того как попадут туда, что дальше будет происходить с процессом уже не важно (можно поставить return после записи в Pipe в дочернем процессе).
    Ответ написан
    4 комментария
  • Как сделать random с неравномерным распределением в Python?

    @nirvimel
    Сделал справочную таблицу по функциям модуля random, которые генерируют значения с заданным вероятностным распределением.

    ФункцияВероятностное распределение
    random.uniform(a, b)Uniform distribution
    (Непрерывное равномерное распределение)
    random.triangular(low, high, mode)Triangular distribution
    random.betavariate(alpha, beta)Beta distribution
    (Бета-распределение)
    random.expovariate(lambd)Exponential distribution
    (Экспоненциальное распределение)
    random.gammavariate(alpha, beta)Gamma distribution
    (Гамма-распределение)
    random.gauss(mu, sigma)
    random.normalvariate(mu, sigma)
    Normal distribution
    (Нормальное распределение)
    random.lognormvariate(mu, sigma)Log-normal distribution
    (Логнормальное распределение)
    random.vonmisesvariate(mu, kappa)Von_Mises_distribution
    random.paretovariate(alpha)Pareto distribution
    (Распределение Парето)
    random.weibullvariate(alpha, beta)Weibull distribution
    (Распределение Вейбулла)


    Что касается вопроса, то, в зависимости от формы графика, которой вы добиваетесь, вам может подойти одно из этих:
    1. random.triangular(0., 1., 0.)
    2. random.expovariate(1.) (параметр lambd характеризует "наклон" графика, значение 1. выбрано произвольно)
    3. math.fabs(random.gauss(0., 1.)) (параметр sigma характеризует "наклон" графика, значение 1. выбрано произвольно)
    Ответ написан
    Комментировать
  • Какой нужен сертифкат для сбора и обработки пользовательских данных на сайте?

    @nirvimel
    Сначала нужно подать заявление на получения права обладания сертификатом (в двух экземплярах). Потом собрать все необходимые справки. Потом записаться в очередь на получение сертификата, вам дадут талон с номером в очереди. Каждый день придется звонить и выяснять не подошла ли ваша очередь, если по телефону они не скажут, то придется лично идти выяснять, потому что если пропустить очередь, то придется начинать все с начала. Это долгая история может растянуться на месяцы.
    Но у моего знакомого есть знакомый, который делает это за один день, нужно только передать определенную сумму и оставить телефон, вам позвонят, назовут кабинет, вы пройдете туда без всяких очередей и заберите готовый сертификат со всеми росписями и печатями.

    spoiler
    Какой еще * сертификат? Миллионы сайтов собирают пользовательские данные, это неотъемлемая часть их функционала, без этого они просто не способны работать. Это самый обычный бизнес (или некоммерческая деятельность), которым может заниматься любой индус, и никакой сертификат для этого ему не нужен.
    Ответ написан
    Комментировать
  • Можно ли спарсить зашифрованный сайт?

    @nirvimel
    Возможно зашифрован ваш браузер. В моем браузере эта страница ни разу не зашифрована.
    2ac843ebfc4a43a287028efb8de4f63c.png
    Ответ написан
    1 комментарий
  • Возможно ли восстановить винчестер в моем случае?

    @nirvimel
    1. Прогнать в victoria / MHDD на запись.
    2. Потом прогнать на чтение. Если остались ошибки, то перейти к пункту 1.

    Хотя, если хаард уже начал сыпаться, то он продолжит... Но надежда умирает последней, ведь так?
    Ответ написан
    Комментировать
  • Копирование сайта. Законно ли это?

    @nirvimel
    Стал замечать рост предложений копирования любого понравившегося сайта.

    А я где-то к концу нулевых годов стал замечать что эта тема окончательно потеряла актуальность. Раньше на этом можно еще было срубить какие-то деньги (не так много как на сапе, но все ж таки), потом ПС окончательно слили копипастеров в самый конец выдачи.
    Ответ написан
    Комментировать
  • Как объяснить разную скорость выполнения вложенных циклов в разных языках?

    @nirvimel
    Меня как-то не устроило то, как вы оценили производительность Python, поэтому я взялся чуть подправить ваш пример для демонстрации совершенно других результатов. Запуск моего примера кроме установки numpy (pip install numpy), потребует установку еще одной интересной библиотеки (pip install numba) с ее установкой могут быть связанны некоторые трудности на различных ОС (она зависит еще и от llvm), но, поверьте, оно того стоит, полученные цифры производительности должны вам понравиться.
    Для демонстрации реальной скорости вычислений в моем примере миллион итераций это довольно мало, камень не успевает хорошо прогреться. Обратите внимание, я заменил миллион итераций на 100 миллионов, поэтому полученный результат надо разделить на 100 для сравнения с другими языками. Вот, собственно, сам код:
    from numba import jit
    import numpy
    
    
    @jit
    def inner_func(a_list, b_list):
        sum = 0
        j = 0
        for y in range(0, 16):
            for x in range(0, 16):
                p = a_list[j] - b_list[j]
                sum += p * p
                j += 1
        return sum
    
    
    @jit
    def outer_func(a_list, b_list):
        sum = 0
        for g in range(0, 100000000):  # 100 000 000 == 10^8 !!!
            sum += inner_func(a_list, b_list)
        return sum
    
    
    def main():
        maxint = numpy.iinfo(numpy.intc).max
        a_list = numpy.random.randint(maxint, size=256)
        b_list = numpy.random.randint(maxint, size=256)
        sum = outer_func(a_list, b_list)
        print(sum)
    
    
    if __name__ == '__main__':
        main()

    Если вам удалось это запустить и полученные цифры вас впечатлили, то я бы попросил подправить в вашем вопросе ту часть, которая касается Python, для восстановления справедливости в отношении этого великолепного языка.
    Ответ написан
  • Как правильно печатать unicode символы в файл на питоне?

    @nirvimel
    with open(path, 'w+') as f:
          f.write(json.dumps(data, indent=2, ensure_ascii=False).encode('utf-8'))
    Ответ написан
    2 комментария
  • Так у чего производительность выше и вероятность успешного завершения проекта у node.js или Python?

    @nirvimel
    Для того чтобы дать квалифицированный и обоснованный ответ по всем пунктам надо быть как минимум ПМ с опытом подобного рода крупных проектов на обоих языках и стеках технологий. Каждый такой проект растягивается на годы, вероятность того что ПМу за свою карьеру посчастливится руководить крупными проектами на обоих стеках существует, но не высокая. Еще меньше вероятность что такой ПМ сидит на Тостере 1 января. Так что мое мнение и мнение других, здесь присутствующих, программистов следует понимать как мнение каменщиков о смете на строительство дворца. То есть все это полное ИМХО, заангажированное в сторону знакомых по опыту технологий. И все же постараюсь ответить объективно на сколько возможно.

    1. Цена вопроса разработки.

    Больше зависит от работы по подбору кадров. В целом средняя ставка оплаты кодера на node и на python примерно равная, чуть выше чем php, но ниже чем java, c++ и др. нескипторые языки.

    2. Цена серверов.

    Обратно пропорциональна производительности. Ни node, ни python не налагают никаких особых требований, влияющих на цену серверов.

    3. Вероятность успешного завершения проекта.

    Полностью зависит от подбора команды и лично от ПМ. Точно так же с любыми другими технологиями.

    4. Производительность.

    Сейчас тут кто-то обязательно упомянет про V8, как решающий аргумент в ползу node. V8, конечно, шедевр в своем роде, но не все так однозначно, потому что на python (в отличии от js) не принято писать критичные по производительности участки на самом скрипте (подробно это этом я уже писал: На чем писать back-end, в котором много математики? ).

    5. Маштабируемость.

    Зависит от архитектуры приложения. Построение легко масштабируемых решений возможно на обоих технологиях.

    6. Отказоустойчивость.

    Сильно зависит от архитектуры приложения и от выбора инструментов (фреймворков, библиотек). Построение отказоустойчивых систем возможно на обоих технологиях.
    Ответ написан
    1 комментарий
  • Как идентифицировать юзера инкогнито?

    @nirvimel
    Собрание секты верующих в приватный режим браузера в этом треде. Волшебная кнопка "инкогнито" (слово то какое красивое) надевает на юзера шапку невидимку, защищает его от слежки и вообще от всего.

    Так что же такое приватный режим на самом деле?

    Privacy mode or "private browsing" or "incognito mode"[1] is a privacy feature in some web browsers to disable browsing history and the web cache. This allows a person to browse the Web without storing local data that could be retrieved at a later date. Privacy mode will also disable the storage of data in cookies and Flash cookies. This privacy protection is only on the local computing device as it is still possible to identify frequented websites by associating the IP address at the web server.

    https://en.wikipedia.org/wiki/Privacy_mode

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

    Чтобы окончательно развеять сомнения в своей уникальности, включаем приватный режим, проходим этот тест и наслаждаемся результатом (Show full results for fingerprinting -> Ctrl+F эту строку):
    Your browser fingerprint appears to be unique among the xxx,xxx,xxx tested so far.
    Ответ написан
    1 комментарий
  • Публичные базы с описанием уязвимостей?

    @nirvimel
    Лента уязвимостей: www.securitylab.ru/vulnerability (там же есть подписка).
    Лента + база + хороший поиск: www.rapid7.com/db/modules
    Ответ написан
    Комментировать
  • Какая free cms менее уязвима для взломов?

    @nirvimel
    Какой же странный этот ваш PHP-мир. Самописные фреймфорки у вас безопаснее, развиваемых годами, ведущих open source проектов, на которых стоят миллионы сайтов. Я даже не знаю, это больше комплимент в сторону смелых и отважных разработчиков собственных фреймфорков, которым приходится повторять нелегкий путь, пройденный до них тысячами таких же борцов за безопасность, или это комплимент в сторону безгранично доверчивых клиентов, которые смело полагаются на безопасность ведущих в отрасли решений на основании того, что этими же решениями пользуются тысячи других контор с серьезными именами.
    Ответ написан
    Комментировать
  • Как получить деньги на WebMoney или Яндекс?

    @nirvimel
    Проще всего разбить кусками по 15к и проводить через разные счета.
    Ответ написан
  • Как долгосрочно "кешировать" результаты в Postgres?

    @nirvimel
    1. Создаете отдельную таблицу под кеш.
    2. Вместо вашего тяжелого запроса пишите:
      SELECT ... FROM cache_table;
      если получили пустой результат, делаете:
      1. UPDATE cache_table SET ... FROM SELECT ... (тут ваш тяжелый запрос);
      2. SELECT ... FROM cache_table;

    3. На обновление исходных данных делаете триггер для очистки кеша:
      DELETE FROM cache_table WHETE ....
    Ответ написан
    Комментировать
  • Книги по java для начинающих?

    @nirvimel
    Не буду оригинален, просто напомню про классику:
    9788131705575.jpg
    (кликабельно)
    Ответ написан
    2 комментария
  • Как перезапустить один поток в консоли?

    @nirvimel
    Какие инструменты вы имеете в виду? Снаружи невозможно повлиять на ход выполнения программы. Обработка исключительных ситуаций должна быть предусмотрена в коде. Обычно для этого реализуют что-то типа планировщика (scheduler) в отдельном потоке, который регулярно опрашивает рабочие потоки потоки (worker) и если worker не успел ответить на запрос в течении определенного времени, он убивается и перезапускается. Общение между потоками идет через очереди ConcurrentLinkedQueue (иногда BlockingQueue, но обычно они используются не для опроса, а для пересылки потоков данных). worker в цикле опрашивает входящую очередь и отвечает на пинг через исходящую. Также неплохо завернуть весь worker в обработчик RuntimeException, в котором сигнализировать scheduler о произошедшим.
    Ответ написан
    3 комментария
  • Как организовать шифрование диска с помощью luks и разблокировкой через ssh?

    @nirvimel
    Я перечитал доступную документацию по dropbear (сам им никогда не пользовался). Официальной документации по нему совсем немного. Наиболее развернутые мануалы в нескольких вариантах собраны в обсуждении этого вопроса.

    Надеюсь у вас получиться решить проблему. Если нет, то я бы все-таки порекомендовал отказаться от шифрования диска целиком и ограничиться шифрованием отдельных разделов с важными данными, типа /home, /var/www и др.
    Ответ написан
    1 комментарий
  • На какую железку поставить i2p для круглосуточной работы?

    @nirvimel
    У меня на VPS год стояла I2P и сейчас, возможно, стоит, я проплатил, но не заглядываю туда давно.
    spoiler

    BlueVM - 15$/год + оплата биткоинами.
    Ответ написан
    Комментировать
  • Зачем нужен доверительный интервал (CI) в статистике?

    @nirvimel
    Если вы задаете такой вопрос, значит вам не помогла википедия, значит приводить тут какие-то ссылки и определения бесполезно. Поэтому попробую объяснить смысл ДИ на простом примере:

    Формулировка через параметры распределения:
    Вес кошки в килограммах - нормально распределенная величина с параметрами mu=5.0, sigma=1.0.

    Формулировка через доверительный интервал:
    Вес кошки лежит в интервале от 3 до 7 килограмм с вероятностью мат. ожиданием в 95%.

    Какая из этих формулировок более интуитивно понятна и дает лучшее представление об описываемой величине?
    Ответ написан
    Комментировать
  • Как оптимизировать работу ПК?

    @nirvimel
    Начать с того, что залить загрузочный образ на флешку, загрузиться с нее и проверить тормоза.
    • Тормоза присутствуют - Проблема с железом.
    • Тормоза исчезли (в реальности очень высокая вероятность этого) - Переустановить ОС за полчаса (как сказал Владимир Мартьянов ) и не тратить время на всякие дефрагментации, чистки реестра и прочие припарки мертвому.
    Ответ написан
    Комментировать