• Какую выбрать файловую систему для большого тома?

    Sly_tom_cat
    @Sly_tom_cat
    .
    XFS. И забудьте вы про нелюбовь XFS к отключению питания - все эти глюки давно исправлены, но ярлык не очень надежной ФС прилип к бедной XFS как тот банных лист к попе.

    Если EXT4 все же выбрать - то на ней хотя бы резерв рута отключите (http://help.ubuntu.ru/wiki/ext4#оптимизация_дисков... Но для 200 Мб фалов EXT2-4 - не слишком гуд - будет много фрагментации (внутрисистемной, о которой вам никто не скажет).
    Ответ написан
  • Почему filter object не приводится к str в python?

    Sly_tom_cat
    @Sly_tom_cat
    .
    А зачем вообще что-то преобразовывать?

    >>> filter(lambda c: c.islower() or c.isdigit(), 'asd123ASD!@#')
    'asd123'

    В описании filter четко описано : If iterable is a string or a tuple, the result also has that type;
    Но это если у вас 'a' - строка. Если 'a' - список - то вы сначала его в строку преобразуйте.

    Но это верно для второго питона - в третьем filter это не функция, а итератор, которые нужно обработать прежде чем получишь строку:

    >>> ''.join(filter(lambda c: c.islower() or c.isdigit(), 'asd123ASD!@#'))
    'asd123'
    >>>
    Ответ написан
  • Как достучаться к ubuntu если поверх стоит оболочка?

    Sly_tom_cat
    @Sly_tom_cat
    .
    Я бы попробовал понажимать кнопки CTRL+ALT+F1 например - глядишь там консоль забыли отключить.
    Но дальше: нужно знать лолгин и пароль. Наверно для этого нужна USB клавиатура.

    Как вариант можно загрузится с LiveCD/USB и уже с Live системы разлочить рута (он в Ubuntu по умолчанию заблокирован) или (что гораздо правильнее) создать нового пользователя включенного в группу adm.

    Но тут большой вопрос - можно ли там с внешнего носителя загрузится...
    Ответ написан
    Комментировать
  • Как правильно форкать проект для основы своего?

    Sly_tom_cat
    @Sly_tom_cat
    .
    Делаете форк, и работаете с ним независимо, оригинальный держите в другой копии. Переключаетесь через git checkout.

    Даже не совсем понял в чем собственно вопрос....
    Ответ написан
    Комментировать
  • Выбор версии python для новичка?

    Sly_tom_cat
    @Sly_tom_cat
    .
    Как по мне так в плане изучения - версия не важна.
    Когда человек дойдет в своих познаниях до тех вопросов, которые различаются (принципиально) в 2-м и 3-м питоне, ему уже будет не важна версия ибо Python примерно на 90% один и тот же в версии 2 и в версии 3.

    И более того - нужно (уже освоив азы) познать в чем разница между 2 и 3, опять же потому, что множество примеров кода на которые выбудете смотреть при решении своих задач - все равно будут в Python2.

    Да и учебников по второму питону написано море - не стоит их игнорировать - есть очень толковые книги.

    Но писать лучше сразу себя приучать в стиле 3-го питона (тот же print - функцией, а не оператором) тем более что 2.7 синтаксически очень сильно совместим с 3.x.
    Ответ написан
  • Как восстановить grub в моем случае?

    Sly_tom_cat
    @Sly_tom_cat
    .
    Комментировать
  • Как загрузить процессор на 100% в linux?

    Sly_tom_cat
    @Sly_tom_cat
    .
    Если проц со встроенной видяхой и хочется именно на все 100% и ВЕСЬ проц загрузить то нужно (в добавок к нагрузке вычислительной части проца) еще 3D бенчей запустить парочку (они кстати и вычислительную часть проца загрузят изрядно).
    Ответ написан
    Комментировать
  • Какую версию Python изучать в конце 2015 года?

    Sly_tom_cat
    @Sly_tom_cat
    .
    Как по мне так разница в версиях будет понятна только тогда, когда начнете сами программировать.

    На уровне учебных материалов (которых кстати больше по 2-й версии) разница - минимальна. Понимать в чем разница - все равно нужно, потому что на 2-м просто туча легаси кода написана.

    Но писать я бы советовал все-таки на 3.
    Ответ написан
    Комментировать
  • Linux. iptables. Перенаправление RDP с одного сервера на другой. Как?

    Sly_tom_cat
    @Sly_tom_cat
    .
    А форвардинг разрешен?
    Что пишет
    # cat /proc/sys/net/ipv4/ip_forward
    ?

    если ноль, то надо разрешить:
    # echo "1" > /proc/sys/net/ipv4/ip_forward
    # sysctl net.ipv4.ip_forward=1
    Ответ написан
  • Как передать код возврата из Python 3.X?

    Sly_tom_cat
    @Sly_tom_cat
    .
    $ cat exit.py 
    #!/usr/bin/env python3
    if __name__ == '__main__':
      exit(1)
    
    $ python3 exit.py 
    $ echo $?
    1
    Ответ написан
    6 комментариев
  • Как получить(вернуть) значение переменной из функции в python 3?

    Sly_tom_cat
    @Sly_tom_cat
    .
    Есть три варианта:
    1. Использовать глобальную переменную
    def fun():
      global i
      while i < 3:
        i=i+1
        print (i)
    
    i = 0
    fun()
    print (i)

    2. Вернуть тербуемое значение как значение функции и присвоить в переменную которая передана
    def fun(i):
      while i < 3:
        i=i+1
        print (i)
      return i
    
    i = 0
    i = fun(i)
    print (i)

    3. Вернуть значение в списке переданном как параметр
    def fun(i):
      while i[0] < 3:
        i[0]=i[0]+1
        print (i[0])
    
    i = [0]
    fun(i)
    print (i[0])


    Первый вариант - не слишком хорош т.к. глобальных переменных в большой программе может быть очень много и это приводит к сложностям сопровождения кода программы.

    Второй вариант - довольно удобен, но нужно не забывать присваивать значение возвращаемое из функции.

    Третий вариант - вообще экзотика, но и он иногда бывает востребован, особенно в рекурсиях или при работе с потоками (когда из потока хочется получить результат).
    Ответ написан
    Комментировать
  • Что почитать про многопоточное программирование на python?

    Sly_tom_cat
    @Sly_tom_cat
    .
    Вот тут: Как правильно закрыть поток в python? я описал пару шаблонов по работе с потоками - вам нужен шаблон "победитель".
    Ответ написан
    Комментировать
  • Как правильно закрыть поток в python?

    Sly_tom_cat
    @Sly_tom_cat
    .
    А не надо извне закрывать потоки и процессы. Можно получить кучу неприятностей.
    В нормально проработанном решении потоки/процессы сами должны закрываться тогда, когда нужно. Если нужно управлять этим извне - то для этого и существуют примитивы типа семафоров/флагов/эвентов.

    В потоки полезно засовывать поиск всякий или подготовку кусочков общего решения. При этом можно использовать два шаблонных примитива: "коллектор" и "победитель":

    "Коллектор":
    import threading
    def job(id, ...):
    global res
      <Подготовка блока данных>
      res[id] = <блок подготовленных данных>
      return
    
    res = []
    for i in range(N):   # запуск N потоков
        res.append(<пустой блок>)
        threading.Thread(target=job, args=(i, ...)).start()
    for th in threading.enumerate():  # ожидание всех потоков 
        if th != threading.currentThread():
          th.join()
    <здесь массив с блоками полностью собран >


    "Победитель":
    import threading
    def job(...):
      global val
      global event
      while <не нашли>
        <элементарный шаг поиска>
        if event.is_set():
          return   # кто-то уже нашел искомое
      val=<то что нашли>
      event.set()   # этот поток нашел искомое и радостно сообщает всем об этом
      return
    
    val = None  # искомое значение
    event = threading.Event() # флаг сигнализирующий о том что решение найдено
    threads = []
    for i in range(N):
        threads.append(threading.Thread(target=job, args=(i, ...)))
        threads[-1].start()
    event.wait()  # тут основной поток ждет сигнала о победе от одного из запущенных потоков
    # если есть шанс, что победителя может и не быть, то в wait() нужно указать таймаут
    # и читать значение event.wait(), что бы узнать - сработал таймаут или появился победитель.
    <тут обрабатываем найденное>
    for th in threads:   # Подчищаем за собой - гарантированно собираем закрывшиеся потоки
          th.join()


    ЗЫ последний цикл в "победителе" - часто не обязателен, но если сама эта процедура запущена во множестве потоков, то можно получить так называемый "потоковый потоп", когда потоки не успевают закрываться сами и плодятся в системе со страшной силой, с предсказуемыми последствиями.
    ЗЫЫ также обратите внимание на варианты работы с набором потоков. В примере "Коллектор" не подразумевается, что в программе есть какие-то еще потоки, поэтому сборка потоков идет всех, кроме текущего (основного потока программы). А вот в "Победитель" потоки сохраняются в списке и из этого списка потом собираются. Это позволяет иметь в программе и другие потоки работающие в параллель с нашим поиском победителя (и в частности запускать сам такой поиск победителя в независимых потоках). Правда для оформления этого кода в отдельные потоки - возможно потребуется избавиться от глобальных переменных и работать только через передаваемые в job параметры.
    Ответ написан
    Комментировать
  • Как работать с многоядерными процессорами в Python?

    Sly_tom_cat
    @Sly_tom_cat
    .
    from time import time
    from threading import Thread
    from multiprocessing import Process

    def count(n):
    while n > 0:
    n -= 1

    startTime = time()
    count(100000000)
    count(100000000)
    print('\nSequential execution time : %3.2f s.'%(time() - startTime))

    startTime = time()
    t1 = Thread(target=count, args=(100000000,))
    t2 = Thread(target=count, args=(100000000,))
    t1.start(); t2.start()
    t1.join(); t2.join()
    print('\nThreaded execution time : %3.2f s.'%(time() - startTime))

    startTime = time()
    p1 = Process(target=count, args=(100000000,))
    p2 = Process(target=count, args=(100000000,))
    p1.start(); p2.start()
    p1.join(); p2.join()
    print('\nMultiprocessed execution time : %3.2f s.'%(time() - startTime))

    Дает на 4-х ядерном проце:

    Sequential execution time : 6.83 s.

    Threaded execution time : 11.37 s.

    Multiprocessed execution time : 6.30 s.

    Но допустим распараллеливание запросов к http серверу и в thread варианте даст огромный выигрыш.
    Т.е. без учета специфики задачи - в многопоточность/многопроцессорность - лучше просто не соваться.
    Ответ написан
    1 комментарий
  • Как установить python 3.3 по умолчанию в ubuntu 13.10?

    Sly_tom_cat
    @Sly_tom_cat
    .
    Если вы не понимаете что делаете, то лучше инструкцией из первого ответа не пользоваться.

    Большинство дистрибутивов Linux (Ubuntu - особенно) содержит кучу утилит написанных на python2 и они не будут работать на python3 с вероятностью близкой к 100%. Подменив ссылку python -> python2 на python -> python3 вы получите в лучшем случае сильно окривевшую систему.

    Если вам нужно что бы питонпрограмма исполнялась третьим питоном - просто измените в первой строчке программы
    #!/usr/bin/env python
    на
    #!/usr/bin/env python3
    Ответ написан
    2 комментария