2016-11-01 9 views
1

У меня есть реализация сетевой системы на основе Twisted. Я заметил, что когда я запускаю функцию (которая выполняет некоторые математические операции и печатает результат) в новом потоке, а не в главном, функция print вызывает Segmentation fault. Является ли это возможным? Есть ли возможность избежать этого?Python: печать в нескольких потоках

+0

Вряд ли, но я думаю, что это возможно. Наиболее очевидная проблема с 'print' в многопоточности заключается в том, что буфер' stdout' не является потокобезопасным, и поэтому более одного потока, выполняющего 'print', может привести к искажению вывода. Между прочим, это не ограничивается только Python. – cdarke

+0

Я заметил аналогичные проблемы с Py3 в Cygwin –

ответ

0

Вам нужно использовать блокировку потока при печати чего-либо в потоке. Пример:

lock = Lock() 

lock.acquire() # will block if lock is already held 
print("something") 
lock.release() 

В этом случае ресурс (в данном случае печати) не будет использоваться в то же время с помощью нескольких потоков. Использование блокировки потока - это что-то вроде фокусировки внимания на резьбе, где происходит блокировка.