<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def insert_task(self, description, tag=None, client=None):
 """ Insert task in task queue. If the task isn't found (backend 404), raises a :class:`gcloud.exceptions.NotFound`. :type description: string :param description: Description of task to perform :type tag: string :param tag: Optional. The tag for this task, allows leasing tasks with a specific tag :type client: :class:`gcloud.taskqueue.client.Client` or ``NoneType`` :param client: Optional. The client to use. If not passed, falls back to the ``client`` stored on the task's taskqueue. :rtype: :class:`_Task`. :returns: a task :raises: :class:`gcloud.exceptions.NotFound` """

        client = self._require_client(client)

        new_task = {
            "queueName": self.full_name,
            "payloadBase64": base64.b64encode(description).decode('ascii'),
            "tag": tag
        }

        response = client.connection.api_request(method='POST', path=self.path + "/tasks/", data=new_task)
        task = Task(taskqueue=self, id=response.get('id'))
        task._set_properties(response)
        return task