如何从Python创建glib.Source?

时间:2011-01-14 07:46:03

标签: python pygtk glib asyncore

我想将一些asyncore.dispatcher个实例集成到GLib的default main context

我想我可以创建一个custom GSource,它能够检测asyncore.socket_map中各种套接字上的事件准备情况。从C我相信这是通过创建必要的GSourceFuncs来完成的,这可能涉及选择的廉价和非阻塞调用,然后使用asyncore.read,.write和朋友处理它们。

如何从Python实际创建GSource? glib.Source类是undocumented,尝试以交互方式使用该类是徒劳的。

是否有其他方法允许我在asyncore模块中处理套接字事件而不诉诸超时(或任何危及潜在吞吐量和CPU使用率的事情)?

2 个答案:

答案 0 :(得分:0)

glib.io_add_watch这样做(在主循环上添加一个关于fd的监视):

http://library.gnome.org/devel/pygobject/2.26/glib-functions.html#function-glib--io-add-watch

答案 1 :(得分:0)

在下面显示了一个简单的方法来集成调度程序和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)