Python Asyncore & Dbus - PullRequest
       4

Python Asyncore & Dbus

6 голосов
/ 27 января 2010

Возможно ли объединить asyncore с dbus через тот же main loop?

Как правило, интеграция с DBus осуществляется через glib основной цикл: можно ли asyncore интегрировать этот основной цикл или с использованием dbus asyncore?

Ответы [ 3 ]

7 голосов
/ 27 января 2010

asyncore отстой. glib уже обеспечивает асинхронную работу, так что просто используйте mainloop glib, чтобы сделать все.

1 голос
/ 14 января 2011

Я написал тривиальную GSource оболочку для одного из моих собственных проектов под названием AsyncoreGSource

Просто прикрепить к соответствующему MainContext:

source = AsyncoreGSource([socket_map])
source.attach([main_context])

Естественно, по умолчанию asyncore.socket_map и по умолчанию MainContext соответственно.

Вы также можете попробовать monkey-patching asyncore.socket_map, который был бы моим решением, если бы я не пробирался через исходный код привязки Python GLib для GSource.

0 голосов
/ 28 января 2010

Хотя вы получили то, что, вероятно, вполне разумный ответ, есть другой подход - вам не нужно использовать цикл asyncore как таковой. Просто вызовите asyncore.loop с нулевым тайм-аутом и счетчиком 1, что останавливает его повторение (и, таким образом, делает имя функции полностью вводящим в заблуждение) и опрашивает сокеты только один раз. Называйте это так часто, как вам нужно.

Я ничего не знаю о поддержке асинхронности в glib, но если для этого требуются потоки, вы все равно можете получить более высокую производительность, если будете использовать асинхронность таким образом, поскольку он будет использовать select или poll и не будет нуждаться в создании дополнительных потоков.

...