|
@@ -1,13 +1,8 @@
|
|
|
package com.tzld.piaoquan.recommend.server.service.score;
|
|
|
|
|
|
import com.tzld.piaoquan.recommend.server.common.base.RankItem;
|
|
|
-import com.tzld.piaoquan.recommend.server.common.base.RequestContext;
|
|
|
import com.tzld.piaoquan.recommend.server.common.base.UserFeature;
|
|
|
-import com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest;
|
|
|
-import com.tzld.piaoquan.recommend.server.model.Video;
|
|
|
-import com.tzld.piaoquan.recommend.server.service.rank.RankParam;
|
|
|
-import com.tzld.piaoquan.recommend.server.service.rank.RankResult;
|
|
|
-import com.tzld.piaoquan.recommend.server.service.recall.RecallResult;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.commons.collections4.CollectionUtils;
|
|
|
import org.apache.commons.lang.exception.ExceptionUtils;
|
|
|
import org.slf4j.Logger;
|
|
@@ -16,13 +11,10 @@ import org.slf4j.LoggerFactory;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.Arrays;
|
|
|
import java.util.List;
|
|
|
-import java.util.concurrent.Callable;
|
|
|
-import java.util.concurrent.ExecutorService;
|
|
|
-import java.util.concurrent.Executors;
|
|
|
-import java.util.concurrent.Future;
|
|
|
-import java.util.concurrent.TimeUnit;
|
|
|
+import java.util.concurrent.*;
|
|
|
|
|
|
|
|
|
+@Slf4j
|
|
|
public class ScorerPipeline {
|
|
|
public static final int corePoolSize = 128;
|
|
|
public static final int SCORE_TIME_OUT = 400;
|
|
@@ -37,16 +29,17 @@ public class ScorerPipeline {
|
|
|
|
|
|
/**
|
|
|
* scoring
|
|
|
+ *
|
|
|
* @return
|
|
|
*/
|
|
|
public List<RankItem> scoring(final ScoreParam param,
|
|
|
- final UserFeature userFeature,
|
|
|
- final List<RankItem> rankItems) {
|
|
|
+ final UserFeature userFeature,
|
|
|
+ final List<RankItem> rankItems) {
|
|
|
|
|
|
if (CollectionUtils.isEmpty(scorers)) {
|
|
|
- // log.error()
|
|
|
+ log.error("scorers is empty");
|
|
|
+ return rankItems;
|
|
|
}
|
|
|
- long scoreStart = System.currentTimeMillis();
|
|
|
List<RankItem> items = rankItems;
|
|
|
|
|
|
for (final AbstractScorer scorer : scorers) {
|
|
@@ -62,12 +55,7 @@ public class ScorerPipeline {
|
|
|
final String scorerName = scorerNames.length > 0 ? scorerNames[scorerNames.length - 1] : fullScorerName;
|
|
|
|
|
|
final List<RankItem> scoreRankerItems = items;
|
|
|
- Callable<List<RankItem>> callable = new Callable<List<RankItem>>() {
|
|
|
- @Override
|
|
|
- public List<RankItem> call() throws Exception {
|
|
|
- return scorer.scoring(param, userFeature, scoreRankerItems);
|
|
|
- }
|
|
|
- };
|
|
|
+ Callable<List<RankItem>> callable = () -> scorer.scoring(param, userFeature, scoreRankerItems);
|
|
|
|
|
|
// execute score use thread to protected score worst time
|
|
|
List<RankItem> scoredItems = new ArrayList<RankItem>();
|
|
@@ -104,7 +92,7 @@ public class ScorerPipeline {
|
|
|
item.getRankerScore().put(scorerName, item.getScore());
|
|
|
}
|
|
|
|
|
|
- //
|
|
|
+ //
|
|
|
long spentTime = System.currentTimeMillis() - startTime;
|
|
|
LOGGER.debug("after scorer [{}], spentTime [{}], before size [{}], remaining size [{}]",
|
|
|
new Object[]{scorerName, spentTime, beforeSize, scoreRankerItems.size()});
|