Python asyncore&dbus
是否有可能通过相同的main loop
将asyncore
与dbus
集成?Python asyncore&dbus
通常的DBus整合是通过glib
主循环中完成:是有可能有两种asyncore
整合这个主循环或有DBUS使用asyncore
的?
asyncore
很烂。 glib
已经提供了异步的东西,所以只需使用glib
的主循环来完成任何事情。
虽然你有可能是一个完全合理的答案,还有另一种方法 - 你不需要使用asyncore循环本身。只需调用asyncore.loop一个零超时和计数为1,这将停止它迭代(并因此使函数名称完全误导)并轮询套接字一次。根据需要随时调用。
我对glib的异步支持一无所知,但如果它需要线程,通过以这种方式使用asyncore可能仍然会获得更好的性能,因为它将使用select或poll并且不需要产生其他线程。
感谢您的想法 - 我已经解决了Twisted这个项目。 – jldupont 2010-01-28 14:21:23
我写了一个简单的GSource
包装的所谓的my own projects一个AsyncoreGSource
只是attach它适当的MainContext
:
source = AsyncoreGSource([socket_map])
source.attach([main_context])
自然的默认值是asyncore.socket_map
和分别为default MainContext
。
您也可以尝试monkey-patching asyncore.socket_map
,如果我没有戳GLib python bindings source code for GSource
,本来应该是我的解决方案。
请注意,我已经遇到了一些性能问题,并且有一个完全与Linux上的GLib轮询界面集成的版本(但不是Windows)。当事情稳定下来,我会更新这个答案。 – 2011-01-15 17:37:12
为什么当你有glib时使用asyncore? glib似乎更有能力... – 2010-01-27 18:31:11