Puts data to the queue and returns a newly created Task

            :param data: Arbitrary task payload
            :param pri: Task priority (0 by default)
            :param ttl: Task time-to-live
            :param ttr: Task time-to-run
            :param delay: Task delay
            :return: Task instance

async def put(self, data, *, pri=None, ttl=None, ttr=None, delay=None):
        """
            Puts data to the queue and returns a newly created Task

            :param data: Arbitrary task payload
            :param pri: Task priority (0 by default)
            :param ttl: Task time-to-live
            :param ttr: Task time-to-run
            :param delay: Task delay
            :return: Task instance
        """
        opts = {}
        if pri is not None:
            opts['pri'] = pri

        if ttl is not None:
            opts['ttl'] = ttl

        if ttr is not None:
            opts['ttr'] = ttr

        if delay is not None:
            opts['delay'] = delay

        args = (data, opts)
        res = await self.conn.call(self.__funcs['put'], args)
        return self._create_task(res.body)