У меня есть реализация сетевой системы на основе Twisted. Я заметил, что когда я запускаю функцию (которая выполняет некоторые математические операции и печатает результат) в новом потоке, а не в главном, функция print
вызывает Segmentation fault
. Является ли это возможным? Есть ли возможность избежать этого?Python: печать в нескольких потоках
1
A
ответ
0
Вам нужно использовать блокировку потока при печати чего-либо в потоке. Пример:
lock = Lock()
lock.acquire() # will block if lock is already held
print("something")
lock.release()
В этом случае ресурс (в данном случае печати) не будет использоваться в то же время с помощью нескольких потоков. Использование блокировки потока - это что-то вроде фокусировки внимания на резьбе, где происходит блокировка.
Вряд ли, но я думаю, что это возможно. Наиболее очевидная проблема с 'print' в многопоточности заключается в том, что буфер' stdout' не является потокобезопасным, и поэтому более одного потока, выполняющего 'print', может привести к искажению вывода. Между прочим, это не ограничивается только Python. – cdarke
Я заметил аналогичные проблемы с Py3 в Cygwin –