Лучший способ использовать память (joblib) с разными учетными записями пользователей?

#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