Получил пустую общую очередь из многопроцессорных процессов - PullRequest
0 голосов
/ 03 июля 2019

Я пытаюсь выполнить проверку API по заданному списку IP-адресов с помощью многопроцессорной обработки. Все процессы, содержащие действительные 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"), но final_list по-прежнему печатается пустым. Кроме того, может кто-нибудь предложить мне способ сохранить идентификатор / имя / идентификатор процесса, который успешно запрашивает API? Большое спасибо!

...