Я предполагаю, что вы говорите о реализации Python на CPython.
В CPython есть глобальная блокировка интерпретатора, которая означает, что одновременно может выполняться только один поток кода Python.Поэтому код, написанный на C, также будет эффективно однопоточным, если только он явно не снимет глобальную блокировку.
Это означает, что если у вас несколько потоков Python, использующих cStringIO одновременно, проблем не будет, так как толькоОднократный вызов метода cStringIO может быть активным одновременно, и cStringIO никогда не снимает блокировку.Однако, если вы вызываете его непосредственно из кода C, который выполняется вне заблокированной среды, у вас будут проблемы.Также, если вы делаете что-то более сложное, чем просто чтение или запись, у вас будут проблемы, например, если вы начнете использовать seek
, поскольку ваши вызовы могут перекрываться неожиданным образом.
Также обратите внимание, что некоторые методы, такие как writelines
может вызывать код Python изнутри метода, поэтому в этом случае вы можете получить другие выходные данные, чередующиеся внутри одного вызова writelines
.
Это верно для большинства стандартных объектов Python: вы можете безопасно использовать объекты изнесколько потоков, так как отдельные операции не прервутся, но порядок, в котором происходят события, не будет определен.