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://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>

        温州市| 临城县| 永登县| 晋江市| 巴塘县| 永嘉县| 天镇县| 康乐县| 洛宁县| 五原县| 贺州市| 崇明县| 黄平县| 商洛市| 胶南市| 贵定县| 策勒县| 右玉县| 临江市| 衡南县| 洛扎县| 斗六市| 红桥区| 若羌县| 女性| 尉犁县| 兰考县| 仙居县| 区。| 桓台县| 稻城县| 竹山县| 琼结县| 博野县| 改则县| 大荔县| 沛县| 万载县| 桃源县| 马尔康县| 华宁县|