File objects are implemented using C’s stdio package and can be created with the built-in open() function
cStringIO.StringIO([s])
Unlike the StringIO module, this module is not able to accept Unicode strings that cannot be encoded as plain ASCII strings.
Another difference from the StringIO module is that ... creates a read-only object. Unlike an object created without a string parameter, it does not have write methods
class StringIO.StringIO([buffer])
The StringIO object can accept either Unicode or 8-bit strings
io.IOBase
abstract base class .acting on streams of bytes. There is no public constructor.
The basic type used for binary data read from or written to a file is bytes (also known as str). Method arguments may also be bytearray or memoryview of arrays of bytes. In some cases, such as readinto(), a writable object such as bytearray is required. Text I/O classes work with unicode data.
io.RawIOBase
Base class for raw binary I/O. It inherits IOBase. There is no public constructor.
Multi-threading
FileIO objects are thread-safe to the extent
Binary buffered objects ... safe to call them from multiple threads at once
TextIOWrapper objects are not thread-safe.