'@param result_producer: a no-arg callable which
returns the data which is to be considered the
\'result\' for this observer list.  note that this
function may be called multiple times - once
upon initial firing, and potentially once more
for each subsequent when_fired() deferred created'

def fire(self, result_producer):

    assert (not self._fired)
    self._fired = True
    self._result_producer = result_producer
    if self._watchers:
        self._fire(self._get_result())
