Próba znalezienia sposobu na uniknięcie zawieszania procesów Xvfb w naszej aplikacji Python podczas korzystania z PyVirtualDisplay. Zasadniczy problem polega na tym, że wywołanie display.stop()
(patrz przykładowy kod poniżej) nie wydaje się prawidłowo wyłączać procesu Xvfb.Jak uniknąć zawieszania procesów Xvfb [podczas używania PyVirtualDisplay]?
PyVirtualDisplay jest bardzo prosty używane:
from pyvirtualdisplay import Display
display = Display(backend='xvfb')
display.start()
... # Some stuff happens here
display.stop()
Teraz klasa Wyświetlacz ma lekką modyfikację aby zapobiec Xvfb z użyciem portów TCP: w zasadzie, dodać -nolisten tcp
z poleceniem wykonania. Modyfikacja odbywa się poprzez nadpisanie właściwości _cmd odpowiedniej klasy XfvbDisplay za:
@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
Co to jest właściwy sposób, aby zakończyć procesy Xvfb w tym kontekście tak, że są one zakończone i nie marudzić?
Dziękuję bardzo!
Zakładając, że pyvirtualdisplay używa 'subprocess.Popen', możesz wywołać zakończyć na tych obiektach. Jeśli nie możesz uzyskać do nich dostępu, możesz spróbować użyć [os.kill] (http://docs.python.org/2/library/os.html#os.kill) we wszystkich procesach potomnych. – alejandro