从多进程进程中获取空共享队列

2024-04-18 17:52:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用多处理从给定的IP地址列表进行API验证。所有包含有效IP的进程都将存储在共享队列中。但是,当我尝试在执行多处理中的进程之后打印队列时,最终的队列是空的。有人能告诉我怎么修改代码吗

def validate(ip_address, results):
  try:
    response = requests.get('....API_URL....'))
    if response.status_code is 200:
        """ store in queue if valid """
        results.put(multiprocessing.current_process())

  except ConnectionError:
    pass

def main():
  """ ip_list is given """
  results = multiprocessing.Queue()

  processes = []
  for ip in ip_list:
      process = multiprocessing.Process(target = validate, args=(ip,results))
      processes.append(process)

  for p in processes:
      p.start()

  for p in processes:
      p.join()

  while results.empty() is False:
      result = results.get()
      final_list.append(result)

  print(final_list) ### EMPTY queue

main()

EDIT1:我试图用一些随机的东西来替换results.put(multiprocessing.current_process()),比如results.put("randomTEXT"),但是最终的列表仍然是空的。另外,有人能给我建议一种方法来存储成功请求API的进程的标识/名称/id吗


Tags: inipapi列表for队列put进程