def top_stories(self, limit=5, first=None, last=None, json=False):
        """
        Get the top story objects list

        params :
            limit = (default | 5) number of story objects needed 
            json = (default | False) 

        The method uses asynchronous grequest form gevent 
        """

        story_ids = requests.get(TOP_STORIES_URL).json()
        story_urls = []
        for story_id in story_ids:
            url = API_BASE + "item/" + str(story_id) + '.json'
            story_urls.append(url)

        if first and last:
            story_urls = story_urls[first:last]
            if limit != 5:
                story_urls[:limit]  # default not given
        else:
            story_urls = story_urls[:limit]

        # try:
        #     response_queue = fetch_parallel(story_urls)
        #     if json:
        #         while not response_queue.empty():
        #             yield response_queue.get()
        #     else:
        #         while not response_queue.empty():
        #             yield story_parser(response_queue.get())
        # except AttributeError:
        #     Exception("Too many requests worker!!")

        # using gevent
        response_list = fetch_event(story_urls)
        if json:
            yield response_list
        else:
            for response in response_list:
                yield story_parser(response)