Контакты

Достижения

Все достижения (1)

Наибольший вклад в теги

Все теги (17)

Лучшие ответы пользователя

Все ответы (22)
  • Есть ли в Python и Go делегаты?

    Bahusss
    @Bahusss
    Python Master
    Делегирование - это шаблон проектирования, и реализовать его можно на большинстве современных языков программирования. Пример для Python есть в вики, никаких дополнительных ключевых слов для реализации делегатов в питоне не требуется, т.к. любой метод можно передать в качестве параметра куда угодно. Так же можно помещать методы в структуры данных, вот пример:

    def say_hello(name):
        print 'Hello,', name
    
    def say_goodbye(name):
        print 'Bye,', name
    
    phrases = {
        'hello': say_hello,
        'bye': say_goodbye,
    }
    
    def say(what, name):
        phrases[what](name)
    
    say('hello', 'Ivan')
    say('bye', 'Oleg')


    В Go этот паттерн реализуется тоже очень лаконично.
    Ответ написан
    Комментировать
  • AJAX, Django, CSRF: Почему выходит ошибка 403?

    Bahusss
    @Bahusss
    Python Master
    На самом деле csrf.js не генерирует csrf token, а только читает его из cookies и помещает в HTTP заголовок, чтобы Django (CsrfViewMiddleware) смог прочитать его и защитить от CSRF-атаки, если токен невалиден.

    Таким образом, чтобы добавить в cookies этот самый csrf token необходимо чтобы:
    1. В MIDDLEWARE_CLASSES обязательно должна быть указана CsrfViewMiddleware
    2. В шаблоне вам нужно вставить в какую-нибудь форму тег {% csrf_token %}, если у вас нет никакой подходящей формы, то воспользуйтесь декоратором ensure_csrf_cookie (https://docs.djangoproject.com/en/1.8/ref/csrf/#dj..., которым нужно декорировать view c index.html.
    Ответ написан
    2 комментария
  • Python Remote Objects - написанный код?

    Bahusss
    @Bahusss
    Python Master
    Где-то год назад, когда нужно было организовать удаленное исполнение питоновского кода на нескольких машинах, я выбирал между двух проектов: Pyro (вы его указали) и RPyc (http://rpyc.wikidot.com/). После недолгого анализа выяснилось, что RPyc использовать намного проще и он прекрасно подходил для моих задач. К сожалению сейчас проект не развивается (не обновлялся уже год), но я всё-таки рекомендую посмотреть документацию и скринкаст по ссылке.
    Ответ написан
    Комментировать
  • Неблокирующее чтение (на уровне ос) файла в питоне?

    Bahusss
    @Bahusss
    Python Master
    Если речь идет про *nix, то посмотрите в сторону функции os.open: https://docs.python.org/2/library/os.html#os.open, скорее всего вам необходимо открывать файл с флагом O_NONBLOCK, больше информации здесь.

    C Windows все сложнее: stackoverflow.com/a/18262401/385884
    Ответ написан
    Комментировать
  • Как правильно реализовать мультипоточность?

    Bahusss
    @Bahusss
    Python Master
    Предлагаю вам свой вариант, через очередь задач:

    from Queue import Queue
    from threading import Thread
    
    def scrape(link):
        conn = sqlite3.connect('db.sqlite3')
        curs = conn.cursor()
        # insert link, close connection
    
    class Worker(Thread):
    
        def __init__(self, tasks):
            super(Worker, self).__init__()
            self.tasks = tasks
            self.daemon = True
    
        def run(self):
            while True:
                link = self.tasks.get()
                try:
                    scrape(link)
                finally:
                    self.tasks.task_done()
    
    
    if __name__ == '__main__':
        # максимальное количество одновременных потоков
        capacity = 0  # infinite
        queue = Queue(capacity)
    
        workers = 3
        for _ in range(workers):
            Worker(queue).start()
    
        for link in select.fetchall():
            queue.put(link)
    
        queue.join()
        print 'Done'
    Ответ написан
    4 комментария