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

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

14.11.2019, 13:28. Показов 1021. Ответов 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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.11.2019, 13:28
Ответы с готовыми решениями:

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

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

Выдает ошибку, а я не могу понять в чем проблема. В чем проблема, скажите пожалуйста!
dx=0.0005; epsillon=0.00002; i=0; for x= 0:0.0005:3 i=i+1; if x<1 y (i)=-1; ...

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

19
Костыли любой сложности
200 / 145 / 36
Регистрация: 27.10.2019
Сообщений: 840
14.11.2019, 13:32 2
TonyNoSound,
while a != 255+1 разве не 256?
0
0 / 0 / 0
Регистрация: 14.11.2019
Сообщений: 10
14.11.2019, 13:36  [ТС] 3
IPv4
Основная статья: IPv4
В 4-й версии IP-адрес представляет собой 32-битное число. Удобной формой записи IP-адреса (IPv4) является запись в виде четырёх десятичных чисел значением от 0 до 255, разделённых точками, например, 192.168.0.3
0
932 / 324 / 106
Регистрация: 04.08.2018
Сообщений: 2,470
14.11.2019, 13:42 4
TonyNoSound, у Вас вроде-как получается бесконечный цикл. Ведь 255+1 = 256, а 256 не будет никогда.
0
0 / 0 / 0
Регистрация: 14.11.2019
Сообщений: 10
14.11.2019, 13:44  [ТС] 5
Damenikx, Основной скрипт работает. Проблема в том , что он не вызывается из другого скрипта.
Он не доходит до 256) Если делать только до 255...то цикл прервется на этом и завершиться не пропинговав адрес заканчивающийся на 255.
Поэтому там стоит +1 чтобы он проскочил этот момент и завершил цикл.
0
Автоматизируй это!
Эксперт Python
4980 / 3429 / 987
Регистрация: 30.03.2015
Сообщений: 10,595
Записей в блоге: 29
14.11.2019, 13:50 6
TonyNoSound, start и end зачем, если не используются? Пул откуда -не вижу импортов откуда ты его берешь.
Отладчик используй и посмотри где именно зависает.

Добавлено через 51 секунду
Цитата Сообщение от TonyNoSound Посмотреть сообщение
что при импорте в другой скрипт
а другой скрипт пустой? нет там переменных или функций совпадающих с именами в пултесте?
0
0 / 0 / 0
Регистрация: 14.11.2019
Сообщений: 10
14.11.2019, 13:53  [ТС] 7
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
4980 / 3429 / 987
Регистрация: 30.03.2015
Сообщений: 10,595
Записей в блоге: 29
14.11.2019, 13:55 8
Цитата Сообщение от TonyNoSound Посмотреть сообщение
from multiprocessing import Pool
не надо, ели у тебя только пинги по сети и никаких громадных вычислений, то только мультитрединг или асинк! Не читал чтоль как многопоточность устроена?

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

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

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

Добавлено через 1 минуту
Welemir1, но там есть более полезная функция, когда по размеру пакетов идет обращение на адреса. можно делать запрос по определенному объему.
0
Автоматизируй это!
Эксперт Python
4980 / 3429 / 987
Регистрация: 30.03.2015
Сообщений: 10,595
Записей в блоге: 29
14.11.2019, 14:07 16
TonyNoSound, ну вот -мультитрединг, ставим таймаут пингу разумный, не считаем что программа зависла до истечения времени количество_адресов*таймаут
0
Эксперт Python
5154 / 3673 / 1162
Регистрация: 28.10.2013
Сообщений: 9,235
Записей в блоге: 1
14.11.2019, 14:35 17
Цитата Сообщение от 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  [ТС] 18
Garry Galler, да спасибо использовал. Приятнее смотреть стало на код)
0
0 / 0 / 0
Регистрация: 14.11.2019
Сообщений: 10
18.11.2019, 12:22  [ТС] 19
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
4980 / 3429 / 987
Регистрация: 30.03.2015
Сообщений: 10,595
Записей в блоге: 29
18.11.2019, 12:32 20
Цитата Сообщение от TonyNoSound Посмотреть сообщение
уменьшить скорость исполнения?
то есть замедлить?

если ускорить то надо разбираться, смотреть где больше времени тратится, что можно упростить
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.11.2019, 12:32

Ошибка при импорте модуля SSH
Имеется Powershell 4.0 Делаю импорт модуля ssh Выдает вот такую ошибку PS...

TypeScript Ошибка при импорте модуля
Всем привет. Возникла такая проблема: При компиляции скриптов в 'es3' на выходе такой код: "use...

Устранить ошибку при импорте модуля RoboBrowser
Устанавливал pip'ом модуль robobrowser, вместе с ним автоматом встали beautifulsoup4, Werkzeug,...

Подскажите пожалуйста в чем может быть трабл при компиляции класса выдает ошибку
Подскажите пожалуйста в чем может быть проблема: при компиляции класса выдает ошибку:...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.