LINUX.ORG.RU

Странная работа потоков в Python.


0

2

Точней будет сказать работает все как надо, но команда print иногда как будто бы склеивается с другой командой print. Просто интересно, из-за чего такое происходит?
Вот рабочий код: видно как стоят print.
А вот выхлоп. Сначала вывод вообще слеплен как попало.

★★

Последнее исправление: Chubakur (всего исправлений: 1)

А вот выхлоп. Сначала вывод вообще слеплен как попало.

Попробуй

sys.stdout.write(...)
sys.stdout.flush(...)

pacify ★★★★★
()

> Просто интересно, из-за чего такое происходит?

Как бы классика жанра (RTFM) - когда неск потоков сливают в один ресурс вывод смешивается непредсказуемым образом. Вообще это обычно приводят как пример;-)

AIv ★★★★★
()

Как бы print a, b, c это три действия, и естественно есть вероятность, что print a одного потока внезапно встрянет между print b и print c другого. Анонимус выше предложил самый подходящий вариант решения.

pevzi ★★★★★
()
Ответ на: комментарий от anonymous

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

>>> print "{0}{{{1}}}".format(13, 666)
13{666}
anonymous
()

> Просто интересно, из-за чего такое происходит?

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

Nastishka ★★★★★
()
Ответ на: комментарий от Nastishka

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

Напр. лочить добавление/удаление элемента в словарь без толку. А вот ввод-вывод действительно надо...

AIv ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.