[oe] Python3 bytecode is stale

Stefan Agner stefan at agner.ch
Fri Jan 25 13:46:35 UTC 2019


Hi,

Recently I noticed that Python3 programs got rather slow. Running the
test application took 12.5 seconds. We are using a read-only file system
and I immediately suspected the bytecode cache. After mounting the
rootfs rw, from the second execution on running the test application
took below 4 seconds.

By simply executing a Hello World, Python declares all code objects as
being stale and tries to rewrite them:

# python3 -v -c 'print("Hello World")'
import _frozen_importlib # frozen
import _imp # builtin
import sys # builtin
import '_warnings' # <class '_frozen_importlib.BuiltinImporter'>
import '_thread' # <class '_frozen_importlib.BuiltinImporter'>
import '_weakref' # <class '_frozen_importlib.BuiltinImporter'>
import '_frozen_importlib_external' # <class
'_frozen_importlib.FrozenImporter'>
import '_io' # <class '_frozen_importlib.BuiltinImporter'>
import 'marshal' # <class '_frozen_importlib.BuiltinImporter'>
import 'posix' # <class '_frozen_importlib.BuiltinImporter'>
import _thread # previously loaded ('_thread')
import '_thread' # <class '_frozen_importlib.BuiltinImporter'>
import _weakref # previously loaded ('_weakref')
import '_weakref' # <class '_frozen_importlib.BuiltinImporter'>
# installing zipimport hook
import 'zipimport' # <class '_frozen_importlib.BuiltinImporter'>
# installed zipimport hook
# bytecode is stale for 'encodings'
# code object from /usr/lib/python3.5/encodings/__init__.py
# could not create
'/usr/lib/python3.5/encodings/__pycache__/__init__.cpython-35.pyc':
OSError(30, 'Read-only file system')
# wrote
'/usr/lib/python3.5/encodings/__pycache__/__init__.cpython-35.pyc'
# bytecode is stale for 'codecs'
# code object from /usr/lib/python3.5/codecs.py
# could not create
'/usr/lib/python3.5/__pycache__/codecs.cpython-35.pyc': OSError(30,
'Read-only file system')
# wrote '/usr/lib/python3.5/__pycache__/codecs.cpython-35.pyc'
import '_codecs' # <class '_frozen_importlib.BuiltinImporter'>
import 'codecs' # <_frozen_importlib_external.SourceFileLoader object at
0xb6b33130>
# bytecode is stale for 'encodings.aliases'
# code object from /usr/lib/python3.5/encodings/aliases.py
# could not create
'/usr/lib/python3.5/encodings/__pycache__/aliases.cpython-35.pyc':
OSError(30, 'Read-only file system')
# wrote
'/usr/lib/python3.5/encodings/__pycache__/aliases.cpython-35.pyc'
import 'encodings.aliases' #
<_frozen_importlib_external.SourceFileLoader object at 0xb6b3d9d0>
import 'encodings' # <_frozen_importlib_external.SourceFileLoader object
at 0xb6b154b0>
# bytecode is stale for 'encodings.ascii'
# code object from /usr/lib/python3.5/encodings/ascii.py
# could not create
'/usr/lib/python3.5/encodings/__pycache__/ascii.cpython-35.pyc':
OSError(30, 'Read-only file system')
# wrote '/usr/lib/python3.5/encodings/__pycache__/ascii.cpython-35.pyc'
import 'encodings.ascii' # <_frozen_importlib_external.SourceFileLoader
object at 0xb6b3db10>
import '_signal' # <class '_frozen_importlib.BuiltinImporter'>
....


This is on a Armv7 device. OpenEmbedded layers are current master.
Python version is 3.5.6. Is this a known issue? Any idea?

--
Stefan


More information about the Openembedded-devel mailing list