[dbus][python] Method dispatch also single-threaded?
John (J5) Palmieri
johnp at redhat.com
Mon Jan 22 15:08:56 PST 2007
On Mon, 2007-01-22 at 16:49 -0600, tsuraan wrote:
> Well if your service object isn't returning to the mainloop or
> starting
> up a thread it isn't going to process the next call until it
> is done
> with the first call. Async calls only have to do with making
> sure the
> client doesn't block. If you don't want your server to block
> on long
> running calls you need to return to the mainloop sooner than
> later. It
> is the same issue as with gui blocking. If you call a
> function which
> doesn't return to the mainloop your application's gui doesn't
> respond.
> You need to either run your calculations in a thread or defer
> sending a
> reply and doing your calculations in an idle
> handler. Remember though,
> you have around 25 seconds to get an answer back to the client
> if it
> uses the default timeout.
>
> So, in order for my example to work, each of the functions would need
> to set a timer, probably to emit a dbus signal, and then return
> immediately? Normally, server frameworks offer some sort of
> threaded-reply model so that the core dispatcher doesn't block when a
> handler function misbehaves. I take it that's impossible with the
> current dbus/glib mainloop, because everything has to be done
> cooperatively, right?
I don't know the code off hand but there is a way to do an async reply
which basically hands you off an object which you use when you are ready
to reply and doesn't send a reply automatically. Look at the code, it
is in the decorator. Something like async_reply=True.
--
John (J5) Palmieri <johnp at redhat.com>
More information about the dbus
mailing list