如何从Python创建glib.Source?
我想把一些 asyncore.dispatcher
实例整合到 GLib 的 默认主上下文 中。
我想我可以创建一个 自定义的 GSource
,这个东西能够检测 asyncore.socket_map
中各种套接字的事件准备情况。在 C 语言中,我相信这是通过创建必要的 GSourceFuncs
来完成的,这可能涉及到一些便宜且不阻塞的选择调用,然后使用 asyncore.read、.write 等方法来处理这些事件。
那么我该如何在 Python 中实际创建一个 GSource 呢?类 glib.Source 是 没有文档 的,尝试互动使用这个类的结果也一直没有成功。
有没有其他方法可以让我在 asyncore
模块中处理套接字事件,而不需要使用超时(或者其他可能影响吞吐量和 CPU 使用率的东西)呢?
2 个回答
-1
下面展示了一种简单的方法,可以把调度器和glib循环结合起来,内容非常简化:
from asyncore import dispatcher, loop
from glib import MainLoop, idle_add
def loop_one():
loop(timeout=0, count=1)
return True
idle_add(loop_one)
0
glib.io_add_watch 这个函数的作用是:在主循环中对一个文件描述符(fd)进行监视。
http://library.gnome.org/devel/pygobject/2.26/glib-functions.html#function-glib--io-add-watch