1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      Python實現(xiàn)具備元素唯一性的隊列-創(chuàng)新互聯(lián)

      直奔主題,在用多線程寫一個爬蟲項目時,很自然的想到用“生產(chǎn)者-消費者”模式,但是又想實現(xiàn)一個額外的需求,即如果爬蟲爬到了隊列中已存在的url,則不進行入隊操作。想實現(xiàn)這個,大概面臨兩個問題:

      創(chuàng)新互聯(lián)2013年開創(chuàng)至今,先為競秀等服務(wù)建站,競秀等地企業(yè),進行企業(yè)商務(wù)咨詢服務(wù)。為競秀企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
      1. Queue對象不支持in操作
      2. 即使1成立,如果在Queue對象外部通過if item in q這種形式也行不通,因為該過程無鎖,多線程情況下就無法保證查詢結(jié)果的準確性

      進而觀察了一下queue模塊的源代碼,因為Queue類是基于deque類實現(xiàn)的,那么就好辦了:put方法稍加改造,增加一個unique參數(shù),依據(jù)此參數(shù)是否為True,在底層的deque中判斷要加入的元素的存在性,以此可實現(xiàn)類似set的特性。

      put方法源代碼:

          def put(self, item, block=True, timeout=None):
              with self.not_full:
                  if self.maxsize > 0:
                      if not block:
                          if self._qsize() >= self.maxsize:
                              raise Full
                      elif timeout is None:
                          while self._qsize() >= self.maxsize:
                              self.not_full.wait()
                      elif timeout < 0:
                          raise ValueError("'timeout' must be a non-negative number")
                      else:
                          endtime = time() + timeout
                          while self._qsize() >= self.maxsize:
                              remaining = endtime - time()
                              if remaining <= 0.0:
                                  raise Full
                              self.not_full.wait(remaining)
                  self._put(item)
                  self.unfinished_tasks += 1
                  self.not_empty.notify()

      修改后的put方法

          def put(self, item, block=True, timeout=None, unique=False):
              """增加了unique參數(shù)"""
              with self.not_full:
                  #----- 以下三行為新增代碼 -----#
                  if unique:
                      if item in self.queue:
                          return
                  #----- 新增代碼結(jié)束 -----#
                  if self.maxsize > 0:
                      if not block:
                          if self._qsize() >= self.maxsize:
                              raise Full
                      elif timeout is None:
                          while self._qsize() >= self.maxsize:
                              self.not_full.wait()
                      elif timeout < 0:
                          raise ValueError("'timeout' must be a non-negative number")
                      else:
                          endtime = time() + timeout
                          while self._qsize() >= self.maxsize:
                              remaining = endtime - time()
                              if remaining <= 0.0:
                                  raise Full
                              self.not_full.wait(remaining)
                  self._put(item)
                  self.unfinished_tasks += 1
                  self.not_empty.notify()

      當然也可以仿照put_nowait方法增加一個快捷方法put_unique,如下

          def put_unique(self, item, block=True, timeout=None):
              return self.put(item, block, timeout, unique=True)

      Have fun!

      另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


      網(wǎng)頁題目:Python實現(xiàn)具備元素唯一性的隊列-創(chuàng)新互聯(lián)
      當前路徑:http://www.ef60e0e.cn/article/hjece.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        溆浦县| 瑞金市| 广元市| 罗山县| 商河县| 陇南市| 嘉祥县| 缙云县| 精河县| 彭山县| 扶沟县| 图片| 射阳县| 金溪县| 化州市| 治县。| 康平县| 普格县| 阿克苏市| 池州市| 四川省| 陵水| 德安县| 长子县| 夏邑县| 读书| 根河市| 祥云县| 宁阳县| 长乐市| 那曲县| 舟曲县| 全州县| 灌阳县| 西峡县| 股票| 东乡族自治县| 合江县| 穆棱市| 汽车| 大洼县|