PyGTK 非阻塞

发布于 2024-12-05 05:18:49 字数 68 浏览 0 评论 0原文

有没有办法在执行一些昂贵的操作时不阻止 PyGTK?我知道线程可以工作,但它需要大量的代码和设置。

谢谢,

Is there a way to not block PyGTK while performing some expensive operation? I know threading would work but it would take a lot of code and setup.

Thanks,

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

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

发布评论

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

评论(3

是你 2024-12-12 05:18:49

在 PyGTK 中设置后台线程并不是那么困难< /a>.

Setting up a background thread in PyGTK is not all that difficult.

梦断已成空 2024-12-12 05:18:49

在 pygtk 中线程并不是一个好的选择。只需通过执行检查主循环中昂贵的循环中的事件,并让它做它的事情:

while my_operation_running:

    <my code>

    while gtk.events_pending():
        gtk.main_iteration()

逐步运行

glib.idle_add(function)

或调整您的昂贵的操作,以便它可以使用每次主循环没有事情可做时 ,它将调用“函数”,只需确保函数跟踪其进度并且在每次调用中仅进行一次迭代。

Threading is not really a good choice in pygtk. Just check the main loop for events in your expensive loop by doing, and let it do its thing:

while my_operation_running:

    <my code>

    while gtk.events_pending():
        gtk.main_iteration()

or tweak your expensive operation so it can be run step-by-step using

glib.idle_add(function)

Every time main loop doesn't have something to do, it will call "function", just make sure function keeps track of its progress and it makes only one iteration in each call.

煮茶煮酒煮时光 2024-12-12 05:18:49

避免使用线程,它们在 PyGTK 中根本不能很好地工作。一些替代方案:

  • 对于从文件描述符读取的 IO/网络操作,请使用
    glib.io_add_watch()
  • 将操作移至单独的进程并
    使用 glib.spawn_async() 与其进行通信

Twisted 是一个很棒的网络库,它是完全非阻塞的,并且与 PyGTK 主循环集成得很好,请考虑使用它。

Avoid threads, they don't work well at all with PyGTK. Some alternatives:

  • For IO/networking operations where you read from a file descriptor, use
    glib.io_add_watch()
  • Move the operations to a separate process and
    communicate with it using glib.spawn_async()

Twisted is a great library for doing networking, which is completely non-blocking and integrates well with the PyGTK mainloop, consider using that.

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