Cố gắng tìm cách tránh treo các quy trình Xvfb trong ứng dụng Python của chúng tôi, khi sử dụng PyVirtualDisplay. Vấn đề quan trọng là gọi display.stop()
(xem mẫu mã bên dưới) dường như không tắt đúng quy trình Xvfb.Làm thế nào để tránh treo các quá trình Xvfb [trong khi sử dụng PyVirtualDisplay]?
PyVirtualDisplay rất đơn giản được sử dụng:
from pyvirtualdisplay import Display
display = Display(backend='xvfb')
display.start()
... # Some stuff happens here
display.stop()
Bây giờ, lớp hiển thị có một sửa đổi nhỏ để ngăn chặn Xvfb từ việc sử dụng các cổng TCP: về cơ bản, thêm -nolisten tcp
cho lệnh thực hiện. Việc sửa đổi được thực hiện bằng cách ghi đè bất động sản _cmd lớp XfvbDisplay của thích hợp:
@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
cách thích hợp để kết thúc quá trình Xvfb trong bối cảnh này để họ được chấm dứt và không nán lại là gì?
Cảm ơn rất nhiều!
Giả sử pyvirtualdisplay sử dụng 'subprocess.Popen', bạn có thể gọi chấm dứt trên các đối tượng đó. Nếu bạn không thể truy cập vào chúng, bạn có thể thử sử dụng [os.kill] (http://docs.python.org/2/library/os.html#os.kill) trên tất cả các tiến trình con. – alejandro