6

asyncore是否可以通过dbus相同的方式集成main loop

通常,DBus 集成是通过glib主循环完成的:是否可以asyncore集成这个主循环使用 dbus asyncore

4

3 回答 3

7

asyncore糟透了。glib已经提供了异步的东西,所以只需使用glib's mainloop 来做所有事情。

于 2010-01-27T18:32:13.930 回答
1

我为我自己的一个项目写了一个简单的GSource包装器,叫做AsyncoreGSource

只需其附加到适当的MainContext

source = AsyncoreGSource([socket_map])
source.attach([main_context])

自然地,默认值分别是asyncore.socket_map默认值MainContext

你也可以试试monkey-patchingasyncore.socket_map,如果我没有浏览GLib python bindings 源代码的GSource话,这将是我的解决方案。

于 2011-01-14T09:29:48.103 回答
0

尽管您得到的答案可能是完全合理的,但还有另一种方法 - 您不需要使用 asyncore 本身的循环。只需使用零超时和计数 1 调用 asyncore.loop,它会停止它的迭代(从而使函数名称完全误导)并且只轮询一次套接字。根据需要经常调用它。

我对 glib 的异步支持一无所知,但如果它需要线程,您可能仍然可以通过以这种方式使用 asyncore 获得更好的性能,因为它将使用 select 或 poll 并且不需要产生额外的线程。

于 2010-01-28T12:02:26.043 回答