[英]Python asyncore & dbus
是否可以通過相同的main loop
將asyncore
與dbus
集成?
通常,DBus集成是通過glib
主循環完成的:是否可以讓asyncore
集成這個主循環或讓dbus使用asyncore
?
asyncore
糟透了。 glib
已經提供了異步的東西,所以只需使用glib
的mainloop來做所有事情。
我為自己的一個名為AsyncoreGSource
的項目編寫了一個簡單的GSource
包裝器
只需將其附加到適當的MainContext
:
source = AsyncoreGSource([socket_map])
source.attach([main_context])
當然,默認值分別是asyncore.socket_map
和默認的MainContext
。
您也可以嘗試使用猴子修補asyncore.socket_map
,如果我沒有通過GSource
的GLib python綁定源代碼進行GSource
,那將是我的解決方案。
雖然你得到的可能是一個非常合理的答案,但還有另一種方法 - 你本身不需要使用asyncore的循環。 只需調用asyncore.loop,其超時為零,計數為1,這將停止迭代(從而使函數名稱完全誤導)並僅輪詢插槽一次。 根據需要經常調用它。
我對glib的異步支持一無所知,但如果它需要線程,你可能會通過這種方式使用asyncore來獲得更好的性能,因為它將使用select或poll而不需要產生額外的線程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.