我想将一些asyncore.dispatcher
个实例集成到GLib的default main context。
我想我可以创建一个custom GSource
,它能够检测asyncore.socket_map
中各种套接字上的事件准备情况。从C我相信这是通过创建必要的GSourceFuncs
来完成的,这可能涉及选择的廉价和非阻塞调用,然后使用asyncore.read,.write和朋友处理它们。
如何从Python实际创建GSource? glib.Source类是undocumented,尝试以交互方式使用该类是徒劳的。
是否有其他方法允许我在asyncore
模块中处理套接字事件而不诉诸超时(或任何危及潜在吞吐量和CPU使用率的事情)?
答案 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)