**更新しました
私は以下を持っています.pyudev readthedocsサイトの例によれば、デーモンスレッドにする必要があります. ただし、Threading と組み合わせても、eventlet のモンキー パッチを使用するとブロックされます。
from threading import Thread
from pyudev import Context, Monitor, MonitorObserver
import eventlet
eventlet.monkey_patch()
def useless_thread():
while True:
print 'sleep thread 1'
time.sleep(2)
# Monitor UDEV for drive insertion / removal
def disk_monitor_thread():
context = Context()
monitor = Monitor.from_netlink(context)
monitor.filter_by('block')
def print_device_event(action, device):
if 'ID_FS_TYPE' in device and device.get('ID_FS_UUID') == '123-UUIDEXAMPLE':
print('{0}, {1}'.format(device.action, device.get('ID_FS_UUID')))
print 'Starting Disk Monitor...'
observer = MonitorObserver(monitor, print_device_event, name='monitor-observer')
print 'Disk Monitor Started'
observer.start()
t1 = Thread(name='uselessthread', target=useless_thread)
t1.start()
disk_monitor_thread()
これを実行します:
sleep thread 1
'Disk Monitor Started'
Flask-SocketIO に eventlet のモンキー パッチを適用しているため、useless_thread1() の起動が停止します。モンキー パッチ コールをコメント アウトすると、すべてが意図したとおりに機能します。