加入收藏 | 设为首页 | 会员中心 | 我要投稿 财气旺网 - 财气网 (https://www.caiqiwang.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

Python 线程池执行 器的concurrent.futures

发布时间:2023-01-31 11:20:00 所属栏目:Linux 来源:
导读:  Python 线程池执行器的concurrent.futures.Future有时挂起

  pythonpython-3.x

  Python 线程池执行器的concurrent.futures.Future有时挂起,python,python-3.x,threadpoolexecutor,concurrent.futur
  Python 线程池执行器的concurrent.futures.Future有时挂起
 
  pythonpython-3.x
 
  Python 线程池执行器的concurrent.futures.Future有时挂起,python,python-3.x,threadpoolexecutor,concurrent.futures,Python,Python 3.x,Threadpoolexecutor,Concurrent.futures,我面临一个问题,来自ThreadPoolExecutor的concurrent.futures.Future有时会挂起,我使用python 3.7,下面是我的代码:import pandas as pdimport concurrent.futuresimport requestsimport timeimport sysfrom urllib3.util.retry import Retryimport osfrom decimal import localcontext, D
 
  我面临一个问题线程池linux,来自ThreadPoolExecutor的concurrent.futures.Future有时会挂起,我使用python 3.7,下面是我的代码:
 
  import pandas as pd
  import concurrent.futures
  import requests
  import time
  import sys
  from urllib3.util.retry import Retry
  import os
  from decimal import localcontext, Decimal, ROUND_HALF_UP
  from datetime import datetime,timezone ,timedelta
  import urllib3
  import base64
  urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
  class Test:
      out = []
      CONNECTIONS = 200
      f1 = open('D:/NewProxeyUserPass.txt', 'r')
      Proxies= f1.readlines()
      f1.close()
      f2 = open('D:/UserAgents.txt', 'r')
      UserAgents= f2.readlines()
      f2.close()
      MAX_RETRIES = 3
      ExcptionCount= int
      ExcptionCount=0
      BASE_URI = 'https://h.com/session.php'
      def load_url(n):
          Proxy_Port_User_Pass=Test.Proxies[n].split(":")
          useragent=Test.UserAgents[n]
          Proxy_Port_User_Pass[0].strip()
          ProxyIP =Proxy_Port_User_Pass[0].strip()
          ProxyPort =Proxy_Port_User_Pass[1].strip()
          username = Proxy_Port_User_Pass[2].strip()
          password =Proxy_Port_User_Pass[3].strip()
          usrPass = username+":"+password
          b64Val = base64.b64encode(usrPass.encode()).decode()
          Timestamp =int((datetime.utcnow() - datetime(1970,1,1)).total_seconds())
          headers = {
              "user-agent": useragent.strip(),
              "Connection":"close"
              }
          proxies = {
             "http"  :"http://" + username + ":" + password + "@"  +  ProxyIP + ":" + ProxyPort,
             "https" :"https://" + username + ":" + password + "@"  +  ProxyIP + ":" +ProxyPort
             }
          JsonSession = "{'device':'id'}"
          retries = Retry(total=3,
                         backoff_factor=0.1)
          adapter = requests.adapters.HTTPAdapter(max_retries=retries)
          with requests.Session() as session:
             session.mount('https://', adapter)
             session.keep_alive = False
             session.trust_env=False
             ans = session.post(Test.BASE_URI,
                                data=JsonSession,
                                headers=headers,
                                params={"timestamp":Timestamp},
                                proxies=proxies,
                                verify=False)
             return ans.content
      def DoWork():
          with concurrent.futures.ThreadPoolExecutor(max_workers=Test.CONNECTIONS) as executor:
              future_to_url = (executor.submit(Test.load_url, n) for n in range(0,150))
              count=int
              count=1
              ExcptionCount = int
              ExcptionCount = 0
              time1 = time.time()
              for future in concurrent.futures.as_completed(future_to_url):
                  try:
                      print( str(count)+" - "+str(future.result())+"\n")
                      count = count +1
                  except Exception as exc:
                          ExcptionCount=ExcptionCount+1
                          print("Exception count : "+ str(ExcptionCount) + " - "+str(exc))
          time2 = time.time()
          print(f'Took {time2-time1:.2f} s'+"\n Total Exceptions Count : "+ str(ExcptionCount))
      pass
  Test.DoWork()
  我找到了这些和但我不知道如何在我的代码中使用它,那么如何防止ThreadPoolExecutor的concurrent.futures.Future挂起,如果你能给我工作代码,谢谢你的帮助
 
  如果我用很少的数字运行for循环,例如150将不会挂起,但如果我以15000(我需要以大量运行它)这样的大数字运行它,将挂起,有什么建议吗?那么,是否有任何方法可以为ThreadPoolExecutor中的每个工作线程设置一个超时来防止挂起?有什么帮助吗?如果我以较小的数字运行for循环,例如150,则不会挂起,但如果我以较大的数字运行它,例如15000(我需要以较大的数字运行),则会挂起,有什么建议吗?那么有没有办法为ThreadPoolExecutor中的每个工作线程设置一个超时来防止挂起?有什么帮助吗?
 

(编辑:财气旺网 - 财气网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!