- 论坛徽章:
- 0
|
python新人,请教各位:
环境:xp +python3.4,在cmd下运行。学写了一个ping局域网的ip地址的程序,最后结果一边显示,一边写入文件,如果用单进程使用正常,不过速度较慢,于是使用多进程multiprocessing.pool,却发现屏显ping 192.168.1.1等,没有返回结果,结果文件也没有写入,就直接结束,就好像多进程函数调用只执行了
def ping_host(ip):
print('ping '+ip+"\n")
这一句,其余的都没有执行,请教这是怎么回事?应该怎么改?不胜感谢
代码如下:
from datetime import datetime
import subprocess
import re
import multiprocessing
import time
def ping_host(ip):
print('ping '+ip+"\n")
f_1.write('ping '+ip+"\n")
p=subprocess.Popen('ping -n 1 '+ip,stdout = subprocess.PIPE,shell = True)
out=p.stdout.read()
regex = re.compile("Minimum = (\d+)ms, Maximum = (\d+)ms, Average = (\d+)ms", re.IGNORECASE)
n1=regex.findall(str(out))
if n1:
print(ip+" is ok\n")
f_1.write(ip+" is ok\n")
else:
print(ip+" is fail\n")
f_1.write(ip+" is fail\n")
time.sleep(2)
if __name__ == "__main__":
multiprocessing.freeze_support()
f_1=open('ip.txt','a')
wan1=input('请输入需要扫描网段的前三段如:(192.168.0):')
#print(wan1)
net_beg=input('请输入起始数字:')
net_end=input('请输入结束数字:')
w_time=datetime.now().strftime('%Y-%m-%d %H:%M:%S')
f_1.write('Begin to ping '+w_time+"\n")
f_1.write('*'*20+"\n")
pool = multiprocessing.Pool(processes=2)
for i in range(int(net_beg),int(net_end)):
ip=wan1+'.'+str(i)
# ping_host(ip)
pool.apply_async(ping_host,(ip,))
pool.close()
pool.join()
f_1.close()
|
|