如何从 Python 创建 glib.Source?

发布于 2024-10-12 03:46:23 字数 1144 浏览 3 评论 0原文

我想集成一些 asyncore.dispatcher 实例放入 GLib 的 默认主上下文

我想我可以创建一个 自定义GSource能够检测asyncore.socket_map。 CI 相信这是通过创建必要的 GSourceFuncs 这可能涉及对 select 的廉价且非阻塞调用,然后使用 asyncore.read、.write 和朋友来处理它们。

如何从 Python 中实际创建 GSource? glib.Source 类未记录,并且已尝试以交互方式使用该类徒劳的。

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

I want to integrate some asyncore.dispatcher instances into GLib's default main context.

I figure I can create a custom GSource that's able to detect event readiness on the various sockets in asyncore.socket_map. From C I believe this is done by creating the necessary GSourceFuncs which could involve cheap and non-blocking calls to select, and then handling them using asyncore.read, .write and friends.

How do I actually create a GSource from Python? The class glib.Source is undocumented, and attempts to use the class interactively have been in vain.

Is there some other method that allows me to handled socket events in the asyncore module without resorting to timeouts (or anything that endangers potential throughput and CPU usage)?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

他是夢罘是命 2024-10-19 03:46:23

glib.io_add_watch 做到了(在主循环中添加对 fd 的监视):

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

glib.io_add_watch does it (add a watch over a fd to the main loop):

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

幸福丶如此 2024-10-19 03:46:23

下面显示了一种将调度程序与 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)

An easy way to integrate a dispatcher with a glib loop is shown, very simplified, below:

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)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文