[英]Python asyncore & dbus
是否可以通过相同的main loop
将asyncore
与dbus
集成?
通常,DBus集成是通过glib
主循环完成的:是否可以让asyncore
集成这个主循环或让dbus使用asyncore
?
asyncore
糟透了。 glib
已经提供了异步的东西,所以只需使用glib
的mainloop来做所有事情。
我为自己的一个名为AsyncoreGSource
的项目编写了一个简单的GSource
包装器
只需将其附加到适当的MainContext
:
source = AsyncoreGSource([socket_map])
source.attach([main_context])
当然,默认值分别是asyncore.socket_map
和默认的MainContext
。
您也可以尝试使用猴子修补asyncore.socket_map
,如果我没有通过GSource
的GLib python绑定源代码进行GSource
,那将是我的解决方案。
虽然你得到的可能是一个非常合理的答案,但还有另一种方法 - 你本身不需要使用asyncore的循环。 只需调用asyncore.loop,其超时为零,计数为1,这将停止迭代(从而使函数名称完全误导)并仅轮询插槽一次。 根据需要经常调用它。
我对glib的异步支持一无所知,但如果它需要线程,你可能会通过这种方式使用asyncore来获得更好的性能,因为它将使用select或poll而不需要产生额外的线程。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.