为 libvirt 中的每个事件调用两次事件回调函数
Event Callback function called twice for each event in libvirt
newVM
是创建新虚拟机的函数。对于每个来宾 VM,事件回调函数被执行 2 次,尽管定时器回调在每个时间间隔仅正确执行一次。我无法找出相同的原因
eventLoopThread = None
libvirt.virEventRegisterDefaultImpl()
def virEventLoopNativeStart():
global eventLoopThread
eventLoopThread = threading.Thread(target=virEventLoopNativeRun, name="libvirtEventLoop")
eventLoopThread.setDaemon(True)
eventLoopThread.start()
def domainEventCallback(conn, dom, event, detail, opaque):
print(" event callback %s %s %s", event, dom.name(), dom.state())
def domainTimeoutCalllback(timer, opaque):
print(" Timeout ")
def virEventLoopNativeRun():
while True:
libvirt.virEventRunDefaultImpl()
virEventLoopNativeStart()
conn = libvirt.open('qemu:///system')
if conn == None:
print('Failed to open connection to qemu:///system', file=sys.stderr)
exit(1)
conn.domainEventRegister(domainEventCallback, None)
conn.setKeepAlive(5, 3)
def newVM(xmldata): #xmldata is XML to define guest machine
try:
conn = libvirt.open('qemu:///system')
if conn == None:
print('Failed to open connection to qemu:///system', file=sys.stderr)
exit(1)
dom = conn.defineXML(xmldata)
if dom == None:
print('Failed to define a domain from an XML definition.', file=sys.stderr)
exit(1)
if dom.create() < 0:
print('Can not boot guest domain.', file=sys.stderr)
exit(1)
libvirt.virEventAddTimeout(runTime, domainTimeoutCalllback, None)
except libvirt.libvirtError:
abort(404, "Libvirt could not be configured")
域事件回调在启动过程中被调用多次是正常的——每次都会被赋予不同的参数值。
newVM
是创建新虚拟机的函数。对于每个来宾 VM,事件回调函数被执行 2 次,尽管定时器回调在每个时间间隔仅正确执行一次。我无法找出相同的原因
eventLoopThread = None
libvirt.virEventRegisterDefaultImpl()
def virEventLoopNativeStart():
global eventLoopThread
eventLoopThread = threading.Thread(target=virEventLoopNativeRun, name="libvirtEventLoop")
eventLoopThread.setDaemon(True)
eventLoopThread.start()
def domainEventCallback(conn, dom, event, detail, opaque):
print(" event callback %s %s %s", event, dom.name(), dom.state())
def domainTimeoutCalllback(timer, opaque):
print(" Timeout ")
def virEventLoopNativeRun():
while True:
libvirt.virEventRunDefaultImpl()
virEventLoopNativeStart()
conn = libvirt.open('qemu:///system')
if conn == None:
print('Failed to open connection to qemu:///system', file=sys.stderr)
exit(1)
conn.domainEventRegister(domainEventCallback, None)
conn.setKeepAlive(5, 3)
def newVM(xmldata): #xmldata is XML to define guest machine
try:
conn = libvirt.open('qemu:///system')
if conn == None:
print('Failed to open connection to qemu:///system', file=sys.stderr)
exit(1)
dom = conn.defineXML(xmldata)
if dom == None:
print('Failed to define a domain from an XML definition.', file=sys.stderr)
exit(1)
if dom.create() < 0:
print('Can not boot guest domain.', file=sys.stderr)
exit(1)
libvirt.virEventAddTimeout(runTime, domainTimeoutCalllback, None)
except libvirt.libvirtError:
abort(404, "Libvirt could not be configured")
域事件回调在启动过程中被调用多次是正常的——每次都会被赋予不同的参数值。