Попытка найти, как избежать зависания процессов Xvfb в нашем приложении Python, при использовании PyVirtualDisplay. Существенная проблема заключается в том, что вызов display.stop()
(см. Пример кода ниже), похоже, не корректно завершает процесс Xvfb.
PyVirtualDisplay очень просто используется:
from pyvirtualdisplay import Display
display = Display(backend='xvfb')
display.start()
... # Some stuff happens here
display.stop()
Теперь класс Display имеет небольшую модификацию, чтобы предотвратить использование Xvfb портами TCP: в основном, добавьте -nolisten tcp
в исполняемую команду. Модификация выполняется путем переопределения соответствующего свойства класса _cmd класса XfvbDisplay:
@property
def _cmd(self):
cmd = [PROGRAM,
dict(black='-br', white='-wr')[self.bgcolor],
'-screen',
str(self.screen),
'x'.join(map(str, list(self.size) + [self.color_depth])),
self.new_display_var,
'-nolisten',
'tcp'
]
return cmd
Каков правильный способ завершения процессов Xvfb в этом контексте, чтобы они были прерваны и не задерживались?
Большое спасибо!