亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? fetcher.java

?? 爬蟲數(shù)據(jù)的改進,并修正了一些bug
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
            parseTextWriter.append(text);
            parseDataWriter.append(parseData);
          }
        }
      } catch (Throwable t) {
        LOG.severe("error writing output:" + t.toString());
      }
    }
                                       
  }
			
  public Fetcher(NutchFileSystem nfs, String directory, boolean parsing)
    throws IOException {

    this.parsing = parsing;

    // Set up in/out streams
    fetchList = new ArrayFile.Reader
      (nfs, new File(directory, FetchListEntry.DIR_NAME).toString());
    if (this.parsing) {
      fetcherWriter = new ArrayFile.Writer
        (nfs, new File(directory, FetcherOutput.DIR_NAME).toString(),
        FetcherOutput.class);
    } else {
      fetcherWriter = new ArrayFile.Writer
        (nfs, new File(directory, FetcherOutput.DIR_NAME_NP).toString(),
        FetcherOutput.class);
    }
    contentWriter = new ArrayFile.Writer
      (nfs, new File(directory, Content.DIR_NAME).toString(), Content.class);
    if (this.parsing) {
      parseTextWriter = new ArrayFile.Writer(nfs,
        new File(directory, ParseText.DIR_NAME).toString(), ParseText.class);
      parseDataWriter = new ArrayFile.Writer(nfs,
        new File(directory, ParseData.DIR_NAME).toString(), ParseData.class);
    }
    name = new File(directory).getName();
  }

  /** Set thread count */
  public void setThreadCount(int threadCount) {
    this.threadCount=threadCount;
  }

  /** Set the logging level. */
  public static void setLogLevel(Level level) {
    LOG.setLevel(level);
    PluginRepository.LOG.setLevel(level);
    ParserFactory.LOG.setLevel(level);
    LOG.info("logging at " + level);
  }

  /** Runs the fetcher. */
  public void run() throws IOException, InterruptedException {
    start = System.currentTimeMillis();
    for (int i = 0; i < threadCount; i++) {       // spawn threads
      FetcherThread thread = new FetcherThread(THREAD_GROUP_NAME+i); 
      thread.start();
    }

    // Quit monitoring if all FetcherThreads are gone.
    // There could still be other threads, which may well be runaway threads
    // started by external libs via FetcherThreads and it is generally safe
    // to ignore them because our main FetcherThreads have finished their jobs.
    // In fact we are a little more cautious here by making sure
    // there is no more outstanding page fetches via monitoring
    // changes of pages, errors and bytes.
    int pages0 = pages; int errors0 = errors; long bytes0 = bytes;
  
    while (true) {
      Thread.sleep(1000);

      if (LogFormatter.hasLoggedSevere()) 
        throw new RuntimeException("SEVERE error logged.  Exiting fetcher.");

      int n = group.activeCount();
      Thread[] list = new Thread[n];
      group.enumerate(list);
      boolean noMoreFetcherThread = true; // assumption
      for (int i = 0; i < n; i++) {
        // this thread may have gone away in the meantime
        if (list[i] == null) continue;
        String name = list[i].getName();
        if (name.startsWith(THREAD_GROUP_NAME)) // prove it
          noMoreFetcherThread = false;
        if (LOG.isLoggable(Level.FINE))
          LOG.fine(list[i].toString());
      }
      if (noMoreFetcherThread) {
        if (LOG.isLoggable(Level.FINE))
          LOG.fine("number of active threads: "+n);
        if (pages == pages0 && errors == errors0 && bytes == bytes0)
          break;
        status();
        pages0 = pages; errors0 = errors; bytes0 = bytes;
      }
    }

    fetchList.close();                            // close databases
    fetcherWriter.close();
    contentWriter.close();
    if (this.parsing) {
      parseTextWriter.close();
      parseDataWriter.close();
    }

  }
  
  public static class FetcherStatus {
    private String name;
    private long startTime, curTime;
    private int pageCount, errorCount;
    private long byteCount;
    
    /**
     * FetcherStatus encapsulates a snapshot of the Fetcher progress status.
     * @param name short name of the segment being processed
     * @param start the time in millisec. this fetcher was started
     * @param pages number of pages fetched
     * @param errors number of fetching errors
     * @param bytes number of bytes fetched
     */
    public FetcherStatus(String name, long start, int pages, int errors, long bytes) {
      this.name = name;
      this.startTime = start;
      this.curTime = System.currentTimeMillis();
      this.pageCount = pages;
      this.errorCount = errors;
      this.byteCount = bytes;
    }
    
    public String getName() {return name;}
    public long getStartTime() {return startTime;}
    public long getCurTime() {return curTime;}
    public long getElapsedTime() {return curTime - startTime;}
    public int getPageCount() {return pageCount;}
    public int getErrorCount() {return errorCount;}
    public long getByteCount() {return byteCount;}
    
    public String toString() {
      return "status: segment " + name + ", "
        + pageCount + " pages, "
        + errorCount + " errors, "
        + byteCount + " bytes, "
        + (curTime - startTime) + " ms";
    }
  }
  
  public synchronized FetcherStatus getStatus() {
    return new FetcherStatus(name, start, pages, errors, bytes);
  }

  /** Display the status of the fetcher run. */
  public synchronized void status() {
    FetcherStatus status = getStatus();
    LOG.info(status.toString());
    LOG.info("status: "
             + (((float)status.getPageCount())/(status.getElapsedTime()/1000.0f))+" pages/s, "
             + (((float)status.getByteCount()*8/1024)/(status.getElapsedTime()/1000.0f))+" kb/s, "
             + (((float)status.getByteCount())/status.getPageCount()) + " bytes/page");
  }

  /** Run the fetcher. */
  public static void main(String[] args) throws Exception {
    int threadCount = -1;
    long delay = -1;
    String logLevel = "info";
    boolean parsing = true;
    boolean showThreadID = false;
    String directory = null;

    String usage = "Usage: Fetcher (-local | -ndfs <namenode:port>) [-logLevel level] [-noParsing] [-showThreadID] [-threads n] <dir>";

    if (args.length == 0) {
      System.err.println(usage);
      System.exit(-1);
    }
      
    int i = 0;
    NutchFileSystem nfs = NutchFileSystem.parseArgs(args, i);
    for (; i < args.length; i++) {       // parse command line
      if (args[i] == null) {
          continue;
      } else if (args[i].equals("-threads")) {    // found -threads option
        threadCount =  Integer.parseInt(args[++i]);
      } else if (args[i].equals("-logLevel")) {
        logLevel = args[++i];
      } else if (args[i].equals("-noParsing")) {
        parsing = false;
      } else if (args[i].equals("-showThreadID")) {
        showThreadID = true;
      } else                                      // root is required parameter
        directory = args[i];
    }

    Fetcher fetcher = new Fetcher(nfs, directory, parsing);// make a Fetcher
    if (threadCount != -1) {                      // set threadCount option
      fetcher.setThreadCount(threadCount);
    }

    // set log level
    fetcher.setLogLevel(Level.parse(logLevel.toUpperCase()));

    if (showThreadID) {
      LogFormatter.setShowThreadIDs(showThreadID);
    }
    
    try {
      fetcher.run();                                // run the Fetcher
    } finally {
      nfs.close();
    }

  }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品一区二区三区蜜桃| 日本一区二区免费在线| 五月天久久比比资源色| 欧美色爱综合网| 免费在线欧美视频| 精品毛片乱码1区2区3区| 国产一区二区三区不卡在线观看| 国产亚洲美州欧州综合国| 成人短视频下载| 亚洲精品国产高清久久伦理二区| 91激情五月电影| 日本女人一区二区三区| 精品国产乱码久久久久久影片| 国产成人亚洲综合色影视| 亚洲欧美综合色| 欧美日韩大陆一区二区| 狠狠色狠狠色合久久伊人| 日本一区二区动态图| 在线观看三级视频欧美| 三级影片在线观看欧美日韩一区二区| 精品国产一区久久| 91网站在线播放| 日韩av网站在线观看| 国产欧美日韩不卡免费| 欧美系列日韩一区| 一本色道久久综合狠狠躁的推荐 | 亚洲最大色网站| 日韩视频免费观看高清完整版在线观看| 国产曰批免费观看久久久| 亚洲人成精品久久久久| 日韩一区二区三区在线| 99久久精品国产麻豆演员表| 日韩电影在线免费观看| 中文字幕av不卡| 欧美一级高清片| 91天堂素人约啪| 捆绑调教美女网站视频一区| 亚洲精品国产a久久久久久| 久久只精品国产| 欧美色网一区二区| 波多野结衣在线一区| 美女看a上一区| 一区二区免费在线播放| 国产拍揄自揄精品视频麻豆| 91麻豆精品国产91久久久资源速度 | 日韩欧美色综合| 在线观看一区不卡| 大尺度一区二区| 紧缚奴在线一区二区三区| 亚洲欧美精品午睡沙发| 国产亚洲欧美在线| 欧美大片一区二区| 欧美精品高清视频| 91高清在线观看| 波多野结衣中文一区| 国产老妇另类xxxxx| 日本三级韩国三级欧美三级| 亚洲最新在线观看| 亚洲精品中文字幕在线观看| 国产精品美女久久久久久2018| 精品国产一区二区三区久久影院| 欧美精品久久一区二区三区| 91国在线观看| 91美女在线看| 97久久超碰国产精品| 99在线精品一区二区三区| 国产成人av影院| 成人激情校园春色| 大美女一区二区三区| 一本久久综合亚洲鲁鲁五月天 | 99久久伊人网影院| 国产成人日日夜夜| 夫妻av一区二区| 成人午夜免费电影| 本田岬高潮一区二区三区| 国产精品888| 国产91丝袜在线播放九色| 国内国产精品久久| 国产成人自拍网| 成人亚洲一区二区一| voyeur盗摄精品| 99r国产精品| 欧美性猛片aaaaaaa做受| 欧美日韩www| 日韩欧美视频一区| 久久精品亚洲麻豆av一区二区 | 亚洲精品在线免费观看视频| 欧美精品一区在线观看| 国产欧美日本一区二区三区| 欧美国产亚洲另类动漫| 亚洲日本免费电影| 一区二区理论电影在线观看| 亚洲国产色一区| 美女高潮久久久| 成人黄色软件下载| 91国产免费看| 日韩视频免费直播| 国产精品美女久久久久久久久| 亚洲欧美日韩系列| 视频一区二区三区在线| 国产高清一区日本| 日本高清视频一区二区| 538在线一区二区精品国产| 精品久久久久久久人人人人传媒| 欧美激情一区二区三区不卡| 亚洲精品视频在线观看网站| 麻豆精品在线看| 北岛玲一区二区三区四区| 欧美剧在线免费观看网站| 久久久久久免费网| 亚洲制服丝袜一区| 久久99精品久久久久婷婷| av中文字幕不卡| 91麻豆精品国产91久久久 | 国产精品白丝jk白祙喷水网站| 99这里都是精品| 欧美成人一级视频| 一区二区国产视频| 国产麻豆精品theporn| 色婷婷久久一区二区三区麻豆| 欧美一区二区三区电影| 中文字幕亚洲区| 男女男精品视频| 91免费版在线| 久久久久青草大香线综合精品| 一区二区三区在线视频免费| 九九热在线视频观看这里只有精品| 97精品国产露脸对白| 26uuu精品一区二区| 亚洲精品国产第一综合99久久| 国产精品影视在线| 欧美人牲a欧美精品| 日日夜夜免费精品视频| caoporn国产精品| 精品播放一区二区| 午夜不卡av免费| 91国内精品野花午夜精品| 久久精品一区二区三区不卡| 三级久久三级久久| 在线观看不卡视频| 国产精品久久久久天堂| 狠狠色综合日日| 日韩三级电影网址| 亚洲一区二区三区四区五区黄| 国产91精品欧美| 2020国产精品自拍| 麻豆国产一区二区| 这里只有精品免费| 丝袜美腿成人在线| 欧美日本一区二区三区四区| 亚洲激情av在线| 一本色道久久综合亚洲精品按摩| 国产精品久久久久久久久免费丝袜| 久久精品国产精品亚洲红杏| 欧美日韩成人一区| 午夜不卡av免费| 欧美精品亚洲二区| 五月婷婷激情综合网| 欧美三级一区二区| 亚洲一区二区免费视频| 在线观看亚洲a| 亚洲影视在线播放| 欧美伊人久久久久久久久影院| 亚洲激情男女视频| 欧美性感一类影片在线播放| 亚洲午夜国产一区99re久久| 日本丶国产丶欧美色综合| 亚洲色大成网站www久久九九| 99re成人在线| 亚洲一区欧美一区| 欧美久久久久中文字幕| 日本最新不卡在线| 精品国产一区二区在线观看| 国产一区不卡在线| 国产精品色眯眯| 91蝌蚪porny| 亚洲va欧美va人人爽午夜| 欧美日本在线一区| 久久国产精品一区二区| 欧美精品一区二区三区一线天视频 | 久久九九全国免费| 国产成人精品影视| 亚洲日本中文字幕区| 色菇凉天天综合网| 亚洲高清在线视频| 欧美一级艳片视频免费观看| 另类成人小视频在线| 国产精品情趣视频| 91国在线观看| 久久国产欧美日韩精品| 中文字幕精品一区二区精品绿巨人 | 蜜桃av一区二区三区| 久久久99精品久久| 成人91在线观看| 视频一区二区国产| 精品成人一区二区三区| www.一区二区| 日本伊人色综合网| 日本一区二区三区免费乱视频| 色老汉av一区二区三区|