У меня есть скрипт Python, который я запускаю на удаленном устройстве. Будут созданы две разные темы. Первый поток создается для мониторинга USB-подключений к устройству.
class USBDetector(threading.Thread):
''' Monitor udev for detection of usb '''
def run(self):
''' Runs the actual loop to detect the events '''
self.context = pyudev.Context()
self.monitor = pyudev.Monitor.from_netlink(self.context)
self.monitor.filter_by(subsystem='usb')
self.monitor.start()
for device in iter(self.monitor.poll, None):
if device.action == 'add':
# some action to run on insertion of usb
Я пытался вставить оператор break, если состояние глобальной переменной изменяется. Но это не сработало. что-то простое, как
if TERMINATE == True:
break
Я посмотрел на https://pyudev.readthedocs.io/en/latest/api/pyudev.html и через чтение это выглядит как этот раздел кода
for device in iter(self.monitor.poll, None):
if device.action == 'add':
# some function to run on insertion of usb
- это бесконечный цикл, если вместо None не указан тайм-аут. Я хочу убить поток, когда другой поток заканчивается. Если я дам команду quit для основного потока, этот usbdetector просто продолжит работать. Любые предложения о том, как это остановить?
(ДОПОЛНЕНО)
Привет,
извините, я решил пока что с моей технологией решить мою проблему.
Если кто-нибудь знает, как выйти из этого цикла for без необходимости второго цикла, дайте мне знать
def run(self):
''' Runs the actual loop to detect the events '''
global terminate
self.rmmod_Module()
self.context = pyudev.Context()
self.monitor = pyudev.Monitor.from_netlink(self.context)
self.monitor.filter_by(subsystem='usb')
self.monitor.start()
count = 0
while not terminate:
count = count + 1
print count
for device in iter(partial(self.monitor.poll, 3), None):
if device.action == 'add':
# some function to run on insertion of usb
очевидно, у меня есть цикл for, вложенный в цикл while, ожидающий истечения завершения. Это просто и работает, однако все же хотелось бы знать, есть ли способ вывести устройство из цикла в цикл iter ().