Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 14.11.2019
Сообщений: 10

Подскажите пожалуйста в чем возникает проблема при импорте модуля

14.11.2019, 13:28. Показов 2220. Ответов 19

Студворк — интернет-сервис помощи студентам
Добрый день, нуждаюсь в помощи.
Начал не так давно изучать python и сделал для себя небольшой скрипт, где смотрю по пингу доступность техники в сети
Он работает, но со своими грехами.
Вопрос заключается в том, что при импорте в другой скрипт я использую только 2 строчки

Python
1
2
from pooltest import *
main()
Процесс зависает и со временем вешает машину.
Но при этом если запускать c всего лишь одной строкой

Python
1
from pooltest import *
и после в Python Shell прописать уже ручками main(), все выводит как оно и должно быть. Подскажите пожалуйста, куда копать.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
from math import ceil
 
adr_list_par = []
start = time.time()
 
#Разделение по партиям
def parting(adr_list,parts):
    part_len = ceil(len(adr_list)/int(parts))
    return [adr_list[part_len*k:part_len*(k+1)] for k in range(int(parts))]
    
#Проверка разделения
def partsonlist(new_adr):    
    if len(new_adr)/10 > 5: 
        parts = len(new_adr) / 20
        adr_list_par = parting(new_adr,parts)
    else:
        parts = len(new_adr) / 10
        adr_list_par = parting(new_adr,parts)
    return adr_list_par
 
#Пингуем и возвращаем данные в формате '192.168.0.3', ':', 1.96     
def ping_lan(adr):
    response_list = ping(adr,size = 5, count = 1)
    a = adr, ':', response_list.rtt_avg_ms
    return a
#Список недоступных ip_адресов
def bad_adr(a):
    bad_adr_list.append(a)
    
def main():
    #Заполнение списка
    a = 1
    new_adr = []
    while a != 255+1:
        new_adr.append('192.168.0.' + str(a))
        a = a +1
    adr_list_par = partsonlist(new_adr)
    adr=[]
    if len(adr_list_par) > 1:
        for i in range(len(adr_list_par)):
            for y in range(len(adr_list_par[i])):
                adr.append(adr_list_par[i][y])
  
    #pool 64
    start64 = time.time()
    pool = Pool(64)
    result = pool.map(ping_lan,adr)
    #print (len(result))
    bad_adr_list = []
    adr_list = []
    for i in result:
        if int(i[2]) > 1000:
            bad_adr_list.append(i)
            continue
        adr_list.append(i)
        
    pool.close()
    pool.join()
    end64 = time.time()
    print ("Время выполнения 64 {}".format(end64-start64))
    print('Список доступных IP адресов','\n'.join([str(lst) for lst in adr_list]), sep='\n')
    print('IP адреса без доступа','\n'.join([str(lst) for lst in bad_adr_list]), sep='\n')
 
if __name__ == '__main__':
    main()
  
end = time.time()
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.11.2019, 13:28
Ответы с готовыми решениями:

Устранить ошибку отсутствия модуля exeptions при импорте модуля docx
Доброго времени суток! только начал знакомство с питоном, установил pip, pycharm и тд. Вот решил сделать хоть немного нужную программку....

Подскажите пожалуйста в чем проблема ?
Класс квадрат, члены класса - длина стороны. Предусмотреть в классе методы вычисления и вывода сведений о фигуре - диагональ, периметр,...

Что неправильно ? подскажите, пожалуйста, в чём проблема....
Всем привет... Начал учить SQL, скачал уроки, учу по ним и в конце тех уроков есть дом. задания, делаю их.. есть такое задание : Вывести...

19
Костыли любой сложности
201 / 146 / 36
Регистрация: 27.10.2019
Сообщений: 843
14.11.2019, 13:32
TonyNoSound,
while a != 255+1 разве не 256?
0
0 / 0 / 0
Регистрация: 14.11.2019
Сообщений: 10
14.11.2019, 13:36  [ТС]
IPv4
Основная статья: IPv4
В 4-й версии IP-адрес представляет собой 32-битное число. Удобной формой записи IP-адреса (IPv4) является запись в виде четырёх десятичных чисел значением от 0 до 255, разделённых точками, например, 192.168.0.3
0
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
14.11.2019, 13:42
TonyNoSound, у Вас вроде-как получается бесконечный цикл. Ведь 255+1 = 256, а 256 не будет никогда.
0
0 / 0 / 0
Регистрация: 14.11.2019
Сообщений: 10
14.11.2019, 13:44  [ТС]
Damenikx, Основной скрипт работает. Проблема в том , что он не вызывается из другого скрипта.
Он не доходит до 256) Если делать только до 255...то цикл прервется на этом и завершиться не пропинговав адрес заканчивающийся на 255.
Поэтому там стоит +1 чтобы он проскочил этот момент и завершил цикл.
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
14.11.2019, 13:50
TonyNoSound, start и end зачем, если не используются? Пул откуда -не вижу импортов откуда ты его берешь.
Отладчик используй и посмотри где именно зависает.

Добавлено через 51 секунду
Цитата Сообщение от TonyNoSound Посмотреть сообщение
что при импорте в другой скрипт
а другой скрипт пустой? нет там переменных или функций совпадающих с именами в пултесте?
0
0 / 0 / 0
Регистрация: 14.11.2019
Сообщений: 10
14.11.2019, 13:53  [ТС]
Welemir1,
Прошу прощение первый раз вообще на форуме что либо выкладываю.
start и end из предыдущей версии, не удалил.
Пул не скопировал весь код))

Python
1
2
3
4
5
6
from multiprocessing import Pool
from multiprocessing.dummy import Pool as ThreadPool
from pythonping import ping
import threading
import time
from math import ceil
вот импорты затерявшиеся)
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
14.11.2019, 13:55
Цитата Сообщение от TonyNoSound Посмотреть сообщение
from multiprocessing import Pool
не надо, ели у тебя только пинги по сети и никаких громадных вычислений, то только мультитрединг или асинк! Не читал чтоль как многопоточность устроена?

что с первым скриптом там только вызов мейн?
отладчиком не смотрел где зацикливается?
0
0 / 0 / 0
Регистрация: 14.11.2019
Сообщений: 10
14.11.2019, 13:57  [ТС]
Welemir1, Да второй скрипт полностью пустой, там только импорт данного модуля и не более.

Добавлено через 2 минуты
Welemir1, смотрел, зацикливается на вызове
Python
1
if __name__ == "__main__":
а дальше строка типа frozen.
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
14.11.2019, 13:59
TonyNoSound, я бы для начала 1) переключил все на мультитрединг 2) убрал пул.джойн 3) взял в руки отладчик

Добавлено через 48 секунд
Цитата Сообщение от TonyNoSound Посмотреть сообщение
if __init__ == "__main__":
почему инит, а не нейм?
0
0 / 0 / 0
Регистрация: 14.11.2019
Сообщений: 10
14.11.2019, 14:00  [ТС]
Welemir1, ок значит буду так и делать) спасибо. начинаю читать про асинк и мультитрединг )
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
14.11.2019, 14:00
TonyNoSound, переход на мультитрединг самый простой - просто слово в импортах заменить)))
0
0 / 0 / 0
Регистрация: 14.11.2019
Сообщений: 10
14.11.2019, 14:01  [ТС]
Welemir1, да опечатался name конечно
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
14.11.2019, 14:02
кстати с пинг не работал - там нельзя таймаут ожидания задать?
0
0 / 0 / 0
Регистрация: 14.11.2019
Сообщений: 10
14.11.2019, 14:07  [ТС]
Welemir1, да есть timeout.

Добавлено через 1 минуту
Welemir1, но там есть более полезная функция, когда по размеру пакетов идет обращение на адреса. можно делать запрос по определенному объему.
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
14.11.2019, 14:07
TonyNoSound, ну вот -мультитрединг, ставим таймаут пингу разумный, не считаем что программа зависла до истечения времени количество_адресов*таймаут
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
14.11.2019, 14:35
Цитата Сообщение от TonyNoSound Посмотреть сообщение
Если делать только до 255...то цикл прервется на этом и завершиться не пропинговав адрес заканчивающийся на 255.
И правильно. 255 не нужно пинговать. Это бродкаст для сети.
#--------------------------------------------------------
Python
1
'192.168.0.' + str(a)
Есть встроенный модуль для работы с IP
Python
1
2
3
4
5
6
7
8
>>> import ipaddress
>>> [str(host) for host in ipaddress.ip_network('192.0.0.0/24').hosts()]
['192.0.0.1', '192.0.0.2', '192.0.0.3', '192.0.0.4', 
'192.0.0.5', '192.0.0.6', '192.0.0.7', 
'192.0.0.8', '192.0.0.9', '192.0.0.10', 
'192.0.0.11', '192.0.0.12', '192.0.0.13',
 '192.0.0.14', '192.0.0.15', '192.0.0.16',...
'192.0.0.254']
1
0 / 0 / 0
Регистрация: 14.11.2019
Сообщений: 10
14.11.2019, 23:55  [ТС]
Garry Galler, да спасибо использовал. Приятнее смотреть стало на код)
0
0 / 0 / 0
Регистрация: 14.11.2019
Сообщений: 10
18.11.2019, 12:22  [ТС]
Welemir1,
Добрый день, полностью изменил код, и теперь все работает, единственное может подскажите а как можно теперь уменьшить скорость исполнения?

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import ipaddress
import time
from pythonping import ping
 
import threading
adr = []
for host in ipaddress.ip_network('192.168.0.0/24').hosts():
    adr.append(str(host))
black_adr_list = []
white_adr_list = []
 
def ping_lan(adr):
    response_list = ping(adr,size = 5, count = 1, timeout = 0.3)
    a = adr, ':', response_list.rtt_avg_ms
    if response_list.rtt_avg_ms > 299:
        black_adr_list.append(a)
    else:
        white_adr_list.append(a)
 
start = time.time()    
threads = []
for i in adr:
    t = threading.Thread(target = ping_lan(i))
    threads.append(t)
    t.start()
end = time.time()
 
print ("Время выполнения {}".format(end-start))
print('Список доступных IP адресов','\n'.join([str(lst) for lst in white_adr_list]), sep='\n')
print('IP адреса без доступа','\n'.join([str(lst) for lst in black_adr_list]), sep='\n')
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
18.11.2019, 12:32
Цитата Сообщение от TonyNoSound Посмотреть сообщение
уменьшить скорость исполнения?
то есть замедлить?

если ускорить то надо разбираться, смотреть где больше времени тратится, что можно упростить
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.11.2019, 12:32
Помогаю со студенческими работами здесь

Почему при импорте базы данных из файла возникает ошибка?
Пытаюсь импортировать базу данных из файла командой SOURSE E:\Snail.sql; Возникает ошибка ERROR 1064 (42000): You have an error in...

Ошибка при импорте модуля
import sys from PySide2 import QtCore, QtGui, QtWidgets from design import Ui_Form # create app app =...

Вызвано исключение: нарушение доступа для записи. this->max было nullptr. Подскажите в чем проблема,пожалуйста
Нужно вводить в конструктор 3 зарплаты,и чтобы выводилось значение (максимальная зп - минимальная зп). Только пытаюсь разобраться в...

Почему возникает ошибка constraint for relation already exists при импорте базы postgres?
Добрый день, Такая проблема. Есть рабочий сайт с именем domen1. Делаю экспорт в pgAdmin ||| . Выбрал: Кодировка UTF-8,...

Ошибка при импорте модуля CherryPy
Собственно, проблема умещается в один скриншот: С чем может быть связано возникновение такой ошибки?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru