Squeak.ru - шаблоны программирования

OSError: [Errno 24] Слишком много открытых файлов: «/dev/null» или IP-адрес не отображается в моей подключенной сети

Я пишу скрипт Python, который определяет IP-адрес, подключенный к моей сети.

Когда я запускаю скрипт в Spyder Anaconda (MAC OS), он работает отлично.

Но когда я запускаю программу в Windows, она печатает только IP-адрес хоста, а не все подключенные IP-адреса.

Также, когда я запускаю программу через терминал в ОС MAC, она снова показывает мне ошибку

OSError: [Errno 24] Слишком много открытых файлов: '/dev/null'

Есть идеи, что я сделал не так?

Мой код:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Thu Mar 21 09:46:11 2019

@author: vivanksharma
"""

import os
import socket    
import multiprocessing
import subprocess
import os


def pinger(job_q, results_q):
    """
    Do Ping
    :param job_q:
    :param results_q:
    :return:
    """
    DEVNULL = open(os.devnull, 'w')
    while True:

        ip = job_q.get()

        if ip is None:
            break

        try:
            subprocess.check_call(['ping', '-c1', ip],
                                  stdout=DEVNULL)
            results_q.put(ip)
        except:
            pass
    os.close(os.devnull)


def get_my_ip():
    """
    Find my IP address
    :return:
    """
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.connect(("8.8.8.8", 80))
    ip = s.getsockname()[0]
    s.close()
    print("Host IP address is "+ip+"\n")
    return ip


def map_network(pool_size=255):
    """
    Maps the network
    :param pool_size: amount of parallel ping processes
    :return: list of valid ip addresses
    """

    ip_list = list()

    # get my IP and compose a base like 192.168.1.xxx
    ip_parts = get_my_ip().split('.')
    base_ip = ip_parts[0] + '.' + ip_parts[1] + '.' + ip_parts[2] + '.'

    # prepare the jobs queue
    jobs = multiprocessing.Queue()
    results = multiprocessing.Queue()

    pool = [multiprocessing.Process(target=pinger, args=(jobs, results)) for i in range(pool_size)]

    for p in pool:
        p.start()

    # cue hte ping processes
    for i in range(1, 255):
        jobs.put(base_ip + '{0}'.format(i))

    for p in pool:
        jobs.put(None)

    for p in pool:
        p.join()

    # collect he results
    while not results.empty():
        ip = results.get()
        ip_list.append(ip)

    return ip_list


if __name__ == '__main__':

    print('Mapping...')
    lst = map_network()


    #Define your Friendly IP here

    friendly_ip = ['192.168.43.21']
    for i in lst:
        flag = 0
        for j in friendly_ip:
            if i == j:
                pass
            else:
                flag = 1
        if(flag==1):
            print("Enemy IP is :"+i)



    print("All IP Address connected to network is : "+str(lst))

PS Это не дублирующий вопрос для OSError [Errno 24]. Я пробовал их все, но безуспешно.

21.03.2019

Ответы:


1

Похоже, здесь может происходить несколько вещей. Мне не удалось точно воспроизвести вашу ошибку, что имеет смысл, поскольку она, вероятно, связана с ограничением файлов вашей ОС.

  1. У вас есть os.close(os.devnull), который, я уверен, должен быть DEVNULL.close(). Это может означать, что вы никогда не закрываете дескриптор файла, что приводит к «слишком большому количеству открытых файлов».

  2. Вы можете попробовать запустить с меньшим параллелизмом (меньший pool_size). Это может сделать вашу программу медленнее, но, по крайней мере, она будет работать. Я установил его на 2, и, хотя это заняло некоторое время, в конце концов он закончился.

21.03.2019
Новые материалы

Угловая структура архитектуры
Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

«Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

Создайте API с помощью Python FastAPI
Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

Веселье с прокси-сервером JavaScript
Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...