def draw(self, label, expire):
        """
        Return a Serial number for this resource queue, after bootstrapping.
        """
        # get next number
        with self.client.pipeline() as pipe:
            pipe.msetnx({self.keys.dispenser: 0, self.keys.indicator: 1})
            pipe.incr(self.keys.dispenser)
            number = pipe.execute()[-1]

        # publish for humans
        self.message('{} assigned to "{}"'.format(number, label))

        # launch keeper
        kwargs = {'client': self.client, 'key': self.keys.key(number)}
        keeper = Keeper(label=label, expire=expire, **kwargs)

        try:
            yield number
        except:
            self.message('{} crashed!'.format(number))
            raise
        finally:
            keeper.close()

        self.message('{} completed by "{}"'.format(number, label))
        number += 1
        self.client.set(self.keys.indicator, number)
        self.announce(number)
Return a Serial number for this resource queue, after bootstrapping.