コード例 #1
0
    def index_subscriptions_for_search(self):
        from apps.rss_feeds.models import Feed
        from apps.reader.models import UserSubscription

        SearchStory.create_elasticsearch_mapping()

        start = time.time()
        user = User.objects.get(pk=self.user_id)
        r = redis.Redis(connection_pool=settings.REDIS_PUBSUB_POOL)
        r.publish(user.username, 'search_index_complete:start')

        subscriptions = UserSubscription.objects.filter(user=user).only('feed')
        total = subscriptions.count()

        feed_ids = []
        for sub in subscriptions:
            try:
                feed_ids.append(sub.feed.pk)
            except Feed.DoesNotExist:
                continue

        feed_id_chunks = [c for c in chunks(feed_ids, 6)]
        logging.user(
            user, "~FCIndexing ~SB%s feeds~SN in %s chunks..." %
            (total, len(feed_id_chunks)))

        search_chunks = [
            IndexSubscriptionsChunkForSearch.s(
                feed_ids=feed_id_chunk,
                user_id=self.user_id).set(queue='search_indexer')
            for feed_id_chunk in feed_id_chunks
        ]
        callback = FinishIndexSubscriptionsForSearch.s(
            user_id=self.user_id, start=start).set(queue='search_indexer')
        celery.chord(search_chunks)(callback)
コード例 #2
0
    def index_subscriptions_for_search(self):
        from apps.rss_feeds.models import Feed
        from apps.reader.models import UserSubscription

        SearchStory.create_elasticsearch_mapping()

        start = time.time()
        user = User.objects.get(pk=self.user_id)
        r = redis.Redis(connection_pool=settings.REDIS_PUBSUB_POOL)
        r.publish(user.username, 'search_index_complete:start')

        subscriptions = UserSubscription.objects.filter(user=user).only('feed')
        total = subscriptions.count()

        feed_ids = []
        for sub in subscriptions:
            try:
                feed_ids.append(sub.feed.pk)
            except Feed.DoesNotExist:
                continue

        feed_id_chunks = [c for c in chunks(feed_ids, 6)]
        logging.user(
            user, "~FCIndexing ~SB%s feeds~SN in %s chunks..." %
            (total, len(feed_id_chunks)))

        tasks = [
            IndexSubscriptionsChunkForSearch().s(
                feed_ids=feed_id_chunk,
                user_id=self.user_id).set(queue='search_indexer')
            for feed_id_chunk in feed_id_chunks
        ]
        group = celery.group(*tasks)
        res = group.apply_async(queue='search_indexer')
        res.join_native()

        duration = time.time() - start
        logging.user(
            user, "~FCIndexed ~SB%s feeds~SN in ~FM~SB%s~FC~SN sec." %
            (total, round(duration, 2)))
        r.publish(user.username, 'search_index_complete:done')

        self.subscriptions_indexed = True
        self.subscriptions_indexing = False
        self.save()