Многопроцессорный Python в NFS получает сообщение «Нет такого файла или каталога» из os.cwd()Linux

Ответить
Anonymous
 Многопроцессорный Python в NFS получает сообщение «Нет такого файла или каталога» из os.cwd()

Сообщение Anonymous »

Я устранял неполадки в тестовом примере в среде EL9, который ведет себя по-другому в среде EL7.
А именно:
  • При монтировании NFS.
  • Происходит в наших системах EL9 (5.14.0-362.18.1.el9_3.x86_64). Не встречается ни в одной из наших старых систем Centos 7 (различные версии ядра 3.10).
  • В подкаталоге. (Не происходит при монтировании «верхнего уровня»).
  • Код часто «ломается» из-за того, что os.cwd() возвращает «нет такого файла или каталога».
Воспроизведено на:
  • 5.14.0-427.el9.x86_64 ( Альма)
  • 5.14.0-362.24.1.el9_3.x86_64 (Алма)
  • 5.14.0-362.18.1.el9_3.x86_64 ( Альма)
  • 5.14.0-362.8.1.el9_3.x86_64 (RHEL)
Пример кода воспроизведения:

Код: Выделить всё

#!/usr/bin/python3 -u

import os
import multiprocessing
import time

if __name__=="__main__":
multiprocessing.set_start_method("spawn")

count = 0
while True:
try:
os.getcwd()
pool = multiprocessing.Pool(10)
pool.close()
pool.terminate()
count += 1
except Exception as e:
print(f"Failed after {count} iterations")
print(e)
break
Я не могу понять, что здесь происходит и почему это не удается.
Похоже, это связано с Pool.terminate(), как будто перед этим вы добавите даже короткий (0,05) сон, проблема перестанет возникать (по крайней мере, ее невозможно было воспроизвести в «разумные» промежутки времени, где вышеописанное не удается за
Но мне интересно, может ли кто-нибудь пролить свет на то, что здесь может быть не так? Я не могу определить, может ли это быть файловый сервер, ядро ​​Linux, что-то внутри Python или... ну, вообще где-то еще.
При включенном rpcdebug мы получаем:

Код: Выделить всё

Apr 24 11:58:47 build-2 kernel: NFS: release(lib/libgcc_s.so.1)
Apr 24 11:58:47 build-2 kernel: NFS: release(lib/libc.so.6)
Apr 24 11:58:47 build-2 kernel: NFS: release(locale/locale-archive)
Apr 24 11:58:47 build-2 kernel: NFS reply getattr: -512
Apr 24 11:58:47 build-2 kernel: nfs_revalidate_inode: (0:53/3834468196) getattr failed, error=-512
Apr 24 11:58:47 build-2 kernel: NFS: lookup(/python_race)
Apr 24 11:58:47 build-2 kernel: NFS call  lookup /python_race
Apr 24 11:58:47 build-2 kernel: RPC:       xs_tcp_send_request(168) = 0
Apr 24 11:58:47 build-2 kernel: NFS: release(bin/python3.11)
Изменить:
Также обнаружил, что это не происходит, если вы добавляете пул.join() до завершения()

Подробнее здесь: https://stackoverflow.com/questions/784 ... rom-os-cwd
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»