前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python多线程100进程一起ping演习笔记

python多线程100进程一起ping演习笔记

作者头像
十四君
发布2019-11-28 00:05:29
9530
发布2019-11-28 00:05:29
举报
文章被收录于专栏:UrlteamUrlteam

的subprocess模块进行播放语音方面,偶然遇到内存爆炸之类问题,so,想系统的学习一下python下的进程管理。本文代码在github上,文件夹是python_multithreading

使用多的原因是,每一个ping都需要有一段时间的返回,如果是单进程的话,可以先去喝杯咖啡了。使用一百个进程,则效率理论上可以提速一百倍(主要时间是消耗在网速,而不是cpu速度)。

基本实现思路是,首先用字符串处理,把需要遍历的本地网络192.168.0.0-192.168.2.255这部分全部变成列表的一个值,然后组建一个队列,按照设定的进程数,开始开辟进程,然后将队列的值开始一步步放进函数中,进行处理。根据返回值。判断是否ping是否联通。然后输出,

源码如下

Python

#!/usr/bin python from threading import Thread import subprocess from Queue import Queue num_threads = 100 #线程数 #采用字符串+运算,添加到列表中。 ips = ['192.168.0.1'] for i in range(2): for j in range(255): l = '192.168.'+str(i)+'.'+str(j) ips.append(l) #print(ips) q = Queue() #建立一个队列 #每个线程都调用同一个函数,i代表当前是第几个线程,导入队列 def pingme(i,queue): while True: ip = queue.get() #print('thread %s pinging %s' %(i,ip)) begin = datetime.datetime.now() ret = subprocess.call('ping -c 1 %s' % ip,shell=True,stdout=open('/dev/null','w'),stderr = subprocess.STDOUT) if ret == 0: print ('%s is alive!' %ip) elif ret == 1: pass #print ('%s is down...' %ip) queue.task_done() for i in range(num_threads): t=Thread(target=pingme,args=(i,q)) t.setDaemon(True) t.start() #print (i) for ip in ips: q.put(ip) #print (ip) print ('main thread waiting....') q.join() print ('done')

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647

#!/usr/bin python from threading import Threadimport subprocessfrom Queue import Queue num_threads = 100#线程数#采用字符串+运算,添加到列表中。ips = ['192.168.0.1']for i in range(2):    for j in range(255):        l = '192.168.'+str(i)+'.'+str(j)        ips.append(l) #print(ips)q = Queue()#建立一个队列#每个线程都调用同一个函数,i代表当前是第几个线程,导入队列def pingme(i,queue):    while True:        ip = queue.get()        #print('thread %s pinging %s' %(i,ip))        begin = datetime.datetime.now()        ret = subprocess.call('ping -c 1 %s' % ip,shell=True,stdout=open('/dev/null','w'),stderr = subprocess.STDOUT)              if ret == 0:            print ('%s is alive!' %ip)        elif ret == 1:            pass            #print ('%s is down...' %ip)        queue.task_done() for i in range(num_threads):    t=Thread(target=pingme,args=(i,q))    t.setDaemon(True)    t.start()    #print (i)  for ip in ips:    q.put(ip)    #print (ip) print ('main thread waiting....')q.join()print ('done')

运行结果就是

main thread waiting…. 192.168.1.1 is alive! 192.168.1.100 is alive! 192.168.1.102 is alive! 192.168.1.104 is alive! 192.168.1.107 is alive! 192.168.1.106 is alive! done

2016-01-28-094747_669x251_scrot
2016-01-28-094747_669x251_scrot

原创文章,转载请注明: 转载自URl-team

本文链接地址: python多线程100进程一起ping演习笔记

Related posts:

  1. 操作系统-多进程和多线程-python
  2. python-opencv人脸识别与树莓派摄像头转头跟随()
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-01-282,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Related posts:
相关产品与服务
人脸识别
腾讯云神图·人脸识别(Face Recognition)基于腾讯优图强大的面部分析技术,提供包括人脸检测与分析、比对、搜索、验证、五官定位、活体检测等多种功能,为开发者和企业提供高性能高可用的人脸识别服务。 可应用于在线娱乐、在线身份认证等多种应用场景,充分满足各行业客户的人脸属性识别及用户身份确认等需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档