目标:

  1.os.fork简单示例

  2.使用os.fork多进程测试IP是否在线

  3.使用os.fork多进程解决tcpserver多客户端连接问题

  4.多线程测试IP地址是否在线

1.os.fork简单示例

代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*- import os pid = os.fork()
print pid
print '--------------------' if pid:
print pid,'from parent'
else:
print pid,'from child'

*提示:子进程执行从os.fork()开始

 
2.使用os.fork多进程测试IP是否在线
代码如下:
#!/usr/bin/env python
#coding:utf8 import os
import subprocess
import sys ips = ('192.168.80.%s' % i for i in xrange(1, 255)) #生成器表达式 for ip in ips:
pid = os.fork()
if not pid:
return_val = subprocess.call('ping -c1 %s &> /dev/null' %ip, shell=True)
if return_val == 0:
print "%s:up" % ip
else:
print "%s:down" % ip
sys.exit(0)
3.使用os.fork多进程解决tcpserver多客户端连接问题
代码如下:

#!/usr/bin/env python
#coding:utf8 import os
import time
from socket import socket, AF_INET, SOCK_STREAM, SOL_SOCKET, SO_REUSEADDR
import sys host = ''
port = 12345
addr = (host, port) s = socket(AF_INET, SOCK_STREAM)
s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
s.bind(addr)
s.listen(1)
while True:
cli_sock, cli_addr = s.accept()
pid = os.fork()
if pid:
while True:
result = os.waitpid(-1, os.WNOHANG)
if result[0] == 0:
break
cli_sock.close()
else:
s.close()
while True:
data = cli_sock.recv(1024).strip()
if not data:
break
cli_sock.send('[%s] %s\r\n' %(time.ctime(), data))
cli_sock.close()
sys.exit(0)
s.close()
 
4.多线程测试IP地址是否在线
代码如下:

#!/usr/bin/env python
#coding:utf8 import subprocess
import threading def ping(host):
result = subprocess.call(
'ping -c2 %s &> /dev/null' % host, shell=True
) if result == 0:
print "%s:up" % host
else:
print "%s:down" % host if __name__ == '__main__':
ips = ('172.40.55.%s' % i for i in xrange(1, 255))
for ip in ips:
t = threading.Thread(target=ping, args=[ip])
t.start()
#!/usr/bin/env python
#coding:utf8 import subprocess
import threading class Ping(object):
def __init__(self, host):
self.host = host def __call__(self):
result = subprocess.call(
'ping -c2 %s &> /dev/null' % self.host, shell=True
) if result == 0:
print "%s:up" % self.host
else:
print "%s:down" % self.host if __name__ == '__main__':
ips = ('172.40.55.%s' % i for i in xrange(1, 255))
for ip in ips:
t = threading.Thread(target=Ping(ip))
t.start()

多线程实现tcpserver多客户端连接

#!/usr/bin/env python
#coding:utf8 import threading
import time
from socket import socket, AF_INET, SOCK_STREAM, SOL_SOCKET, SO_REUSEADDR host = ''
port = 12345
addr = (host, port) def handle_child(c_sock):
while True:
data = c_sock.recv(1024).strip()
if not data:
break
c_sock.send('[%s] %s\r\n' %(time.ctime(), data))
c_sock.close() if __name__ == '__main__':
s = socket(AF_INET, SOCK_STREAM)
s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
s.bind(addr)
s.listen(1)
while True:
cli_sock, cli_addr = s.accept()
t = threading.Thread(target=handle_child, args=(cli_sock,))
t.start()

Python之多进程和多线程的更多相关文章

  1. Python 中多进程、多线程、协程

    进程: 一个运行的程序(代码)就是一个进程,没有运行的代码叫程序,进程是系统资源分配的最小单位,进程拥有自己独立的内存空间,所以进程间数据不共享.开销大. 线程: 调度执行的最小单位,也叫执行路径,不 ...

  2. Python的多进程和多线程

    进程和线程 进程是系统进行资源分配的最小单位,线程是系统进行调度执行的最小单位: 一个应用程序至少包含一个进程,一个进程至少包含一个线程: 每个进程在执行过程中拥有独立的内存空间,而一个进程中的线程之 ...

  3. python之多进程and多线程

    图文来自互联网 一.什么是进程和线程 (https://jq.qq.com/?_wv=1027&k=rX9CWKg4) 进程是分配资源的最小单位,线程是系统调度的最小单位. 当应用程序运行时最 ...

  4. 【python】多进程、多线程、序列

    一.多进程 1.子进程永远返回0,而父进程返回子进程的ID.这样做的理由是,一个父进程可以fork出很多子进程,所以,父进程要记下每个子进程的ID,而子进程只需要调用getppid()就可以拿到父进程 ...

  5. 【转】Python中的GIL、多进程和多线程

    转自:http://lesliezhu.github.io/public/2015-04-20-python-multi-process-thread.html 目录 1. GIL(Global In ...

  6. Python中的多进程与多线程(二)

    在上一章中,学习了Python多进程编程的一些基本方法:使用跨平台多进程模块multiprocessing提供的Process.Pool.Queue.Lock.Pipe等类,实现子进程创建.进程池(批 ...

  7. python采用 多进程/多线程/协程 写爬虫以及性能对比,牛逼的分分钟就将一个网站爬下来!

    首先我们来了解下python中的进程,线程以及协程! 从计算机硬件角度: 计算机的核心是CPU,承担了所有的计算任务.一个CPU,在一个时间切片里只能运行一个程序. 从操作系统的角度: 进程和线程,都 ...

  8. 在python中单线程,多线程,多进程对CPU的利用率实测以及GIL原理分析

    首先关于在python中单线程,多线程,多进程对cpu的利用率实测如下: 单线程,多线程,多进程测试代码使用死循环. 1)单线程: 2)多线程: 3)多进程: 查看cpu使用效率: 开始观察分别执行时 ...

  9. 学习笔记--python中使用多进程、多线程加速文本预处理

    一.任务描述 最近尝试自行构建skip-gram模型训练word2vec词向量表.其中有一步需要统计各词汇的出现频率,截取出现频率最高的10000个词汇进行保留,形成常用词词典.对于这个问题,我建立了 ...

随机推荐

  1. Java中的静态方法能否被重写

    能重写,但没有多态:https://blog.csdn.net/ghgzczxcvxv/article/details/43966243

  2. mac系统PHP 7.1.12安装xhprof并使用[View Full Callgraph]小记

    前几天从php7.0.x 升级到了php7.2.0版本, 结果装xhprof没有找到能支持对应版本的xhprof 于是又安装了一个php7.1.2的版本(brew install h) 接着安装xhp ...

  3. 笔记本启动时提示错误:amd_xata.sys数字签名无法验证

    开机失败,提示adm文件无法验证 文件:Windows\system32\drivers\amd_xata.sys 状态:0xc0000428 信息:Windows 无法验证此文件的数字签名   工具 ...

  4. linux(7)

    第十七单元 Samba服务 [本节内容]1. 掌握samba的功能: samba是一个网络服务器,用于Linux和Windows之间共享文件.2. 掌握samba服务的启动.停止.重启service ...

  5. 用命令行cmd 编译小程序

    操作命令: C:\Users\Administrator>"C:\Program Files (x86)\MSBuild\12.0\Bin\csc.exe" /out:D: ...

  6. Python库-re(正则表达式)

    re库是python的一个标准库,不需要自己用pip额外下载,直接调用即可. 下面介绍以下库中函数的作用. 1.re.compile(patter, flags=0) patter是一个正则表达式字符 ...

  7. map.js

    function Map() { var struct = function(key, value) { this.key = key; this.value = value; } var put = ...

  8. appium 滑动封装

    #获得机器屏幕大小x,y def getSize():     x = dr.get_window_size()['width']     y = dr.get_window_size()['heig ...

  9. 软件官网与memcached介绍

    常见官网 http://www.keepalived.org http://nginx.org/ documentation 模块说明 http://www.apache.org/ https://o ...

  10. Hibernate 一对一、一对多、多对多注解cascade属性的总结

    作用:是否级联被注解字段里面的对象.可选值:javax.persistence.CascadeType.PERSIST, MERGE, REMOVE, REFRESH, DETACH, ALL.可选其 ...