#python #joblib
#python #joblib
Вопрос:
Использование функции памяти joblib для кэширования некоторых функций в общей папке приводит к проблемам.
from joblib import Memory
Memory('/tmp/some_folder')
Папка будет создана для записи только для активного пользователя. Вход в систему с другой учетной записью пользователя в ubuntu приводит к появлению сообщения об ошибке:
File "/home/my_folder/venv/lib/python3.7/site-packages/joblib/memory.py", line 937, in __init__
**backend_options))
File "/home/my_folder/venv/lib/python3.7/site-packages/joblib/memory.py", line 131, in _store_backend_factory
backend_options=backend_options)
File "/home/my_folder/venv/lib/python3.7/site-packages/joblib/_store_backends.py", line 400, in configure
mkdirp(self.location)
File "/home/my_folder/venv/lib/python3.7/site-packages/joblib/disk.py", line 61, in mkdirp
os.makedirs(d)
File "/usr/lib/python3.7/os.py", line 211, in makedirs
makedirs(head, exist_ok=exist_ok)
File "/usr/lib/python3.7/os.py", line 221, in makedirs
mkdir(name, mode)
PermissionError: [Errno 13] Permission denied: '/tmp/some_folder'
Я, конечно, могу изменить права доступа вручную, но каков наилучший способ сделать это автоматически?
Ответ №1:
Я решил эту проблему сам, изменив маску пользователя перед запуском памяти:
umask = os.umask(0) # switch user mask to root
Memory('/tmp/some_folder')
os.umask(umask) # switch user mask back