Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 3, 2014 17:02:41

Galvanize
От:
Зарегистрирован: 2011-01-14
Сообщения: 67
Репутация: +  0  -
Профиль   Отправить e-mail  

Слипшийся print в потоках (threading). Способы решения.

Приветствую.
Есть проблема, когда функция работающая в потоках выводит сообщения в консоль “слипшимися”. Я решаю эту проблему с помощью оборачивания каждого сообщения в RLock.acquire()/release(). Понимаю, что жертвую тем самым скоростью работы. Красивым решения назвать это сложно, поэтому хотел бы узнать у “профи” о существующих лаконичных способах решения данной проблемы “слипания”.
Спасибо.



Отредактировано Galvanize (Авг. 3, 2014 17:03:44)

Офлайн

#2 Авг. 3, 2014 17:18:04

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Слипшийся print в потоках (threading). Способы решения.

:) слипание. Лаконичный способ решения модуль logging



Офлайн

#3 Авг. 3, 2014 18:37:12

Galvanize
От:
Зарегистрирован: 2011-01-14
Сообщения: 67
Репутация: +  0  -
Профиль   Отправить e-mail  

Слипшийся print в потоках (threading). Способы решения.

=) ну да, слипание. Не придумал как назвать - в общем, когда две строки текста должны быть на разных строках, а из-за потоков они слипаются, т.к. те получают одновременный доступ к выводу. Вот придумал один из способов, вроде уже получше прежнего =)

>>> class Print:
        def out(self, string):
        LOCK.acquire()
        print string
        LOCK.release()
		
>>> pr = Print()
>>> pr.out('asdasdasd')
asdasdasd
>>> pr.out('asdasdasdas %s asdasdasd' % 'bbbbb')
asdasdasdas bbbbb asdasdasd



Отредактировано Galvanize (Авг. 3, 2014 18:37:55)

Офлайн

#4 Авг. 3, 2014 19:53:20

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Слипшийся print в потоках (threading). Способы решения.

Вам нужно делать принт только из одного потока.
Например запустите ещё один поток с циклом print, и передавайте туда сообщения через queue из других потоков.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version