Ejemplo n.º 1
0
    def run(self):
        """Run all tasks in the taskset.

        :returns: A :class:`celery.result.TaskSetResult` instance.

        Example

            >>> ts = TaskSet(RefreshFeedTask, [
            ...         ["http://foo.com/rss", {}],
            ...         ["http://bar.com/rss", {}],
            ... )
            >>> result = ts.run()
            >>> result.taskset_id
            "d2c9b261-8eff-4bfb-8459-1e1b72063514"
            >>> result.subtask_ids
            ["b4996460-d959-49c8-aeb9-39c530dcde25",
            "598d2d18-ab86-45ca-8b4f-0779f5d6a3cb"]
            >>> result.waiting()
            True
            >>> time.sleep(10)
            >>> result.ready()
            True
            >>> result.successful()
            True
            >>> result.failed()
            False
            >>> result.join()
            [True, True]

        """
        taskset_id = str(uuid.uuid4())
        conn = DjangoAMQPConnection()
        publisher = TaskPublisher(connection=conn)
        subtask_ids = [
            publisher.delay_task_in_set(
                task_name=self.task_name, taskset_id=taskset_id, task_args=arg, task_kwargs=kwarg
            )
            for arg, kwarg in self.arguments
        ]
        publisher.close()
        conn.close()
        return TaskSetResult(taskset_id, subtask_ids)