Python之多进程和多线程
目标:
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()开始
#!/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)
#!/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()
#!/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之多进程和多线程的更多相关文章
- Python 中多进程、多线程、协程
进程: 一个运行的程序(代码)就是一个进程,没有运行的代码叫程序,进程是系统资源分配的最小单位,进程拥有自己独立的内存空间,所以进程间数据不共享.开销大. 线程: 调度执行的最小单位,也叫执行路径,不 ...
- Python的多进程和多线程
进程和线程 进程是系统进行资源分配的最小单位,线程是系统进行调度执行的最小单位: 一个应用程序至少包含一个进程,一个进程至少包含一个线程: 每个进程在执行过程中拥有独立的内存空间,而一个进程中的线程之 ...
- python之多进程and多线程
图文来自互联网 一.什么是进程和线程 (https://jq.qq.com/?_wv=1027&k=rX9CWKg4) 进程是分配资源的最小单位,线程是系统调度的最小单位. 当应用程序运行时最 ...
- 【python】多进程、多线程、序列
一.多进程 1.子进程永远返回0,而父进程返回子进程的ID.这样做的理由是,一个父进程可以fork出很多子进程,所以,父进程要记下每个子进程的ID,而子进程只需要调用getppid()就可以拿到父进程 ...
- 【转】Python中的GIL、多进程和多线程
转自:http://lesliezhu.github.io/public/2015-04-20-python-multi-process-thread.html 目录 1. GIL(Global In ...
- Python中的多进程与多线程(二)
在上一章中,学习了Python多进程编程的一些基本方法:使用跨平台多进程模块multiprocessing提供的Process.Pool.Queue.Lock.Pipe等类,实现子进程创建.进程池(批 ...
- python采用 多进程/多线程/协程 写爬虫以及性能对比,牛逼的分分钟就将一个网站爬下来!
首先我们来了解下python中的进程,线程以及协程! 从计算机硬件角度: 计算机的核心是CPU,承担了所有的计算任务.一个CPU,在一个时间切片里只能运行一个程序. 从操作系统的角度: 进程和线程,都 ...
- 在python中单线程,多线程,多进程对CPU的利用率实测以及GIL原理分析
首先关于在python中单线程,多线程,多进程对cpu的利用率实测如下: 单线程,多线程,多进程测试代码使用死循环. 1)单线程: 2)多线程: 3)多进程: 查看cpu使用效率: 开始观察分别执行时 ...
- 学习笔记--python中使用多进程、多线程加速文本预处理
一.任务描述 最近尝试自行构建skip-gram模型训练word2vec词向量表.其中有一步需要统计各词汇的出现频率,截取出现频率最高的10000个词汇进行保留,形成常用词词典.对于这个问题,我建立了 ...
随机推荐
- ecmall 挂件开发实例一
(参考网上相关文章,进行测试点评,下述方法测试成功) 1:在页面上添加要展示的页面模块 <div class="left" area="bottom_foot&q ...
- RK3288 指令查看HDMI当前分辨率和支持的分辨率
$ adb shell root@xxx:/ # cd /sys/class/display/HDMI cd /sys/class/display/HDMI root@xxx:/sys/class/d ...
- mac系统PHP 7.1.12安装xhprof并使用[View Full Callgraph]小记
前几天从php7.0.x 升级到了php7.2.0版本, 结果装xhprof没有找到能支持对应版本的xhprof 于是又安装了一个php7.1.2的版本(brew install h) 接着安装xhp ...
- wdlinux中apache配置反向代理模块
想要在.htaccess中开启反向代理功能都不行[apache中没有mod_proxy模块] .htaccess 文件内容如下 RewriteEngine On RewriteBase / Rewri ...
- 2、ambari搭建HDP集群
一.平台环境 操作系统:CentOS release 6.5 (Final) Java版本:jdk1.8.0_60 Ambari版本:2.2.1.0 HDP版本:2.4.0 MySQL版本:MySQL ...
- Hadoop单机环境搭建整体流程
1. Ubuntu环境安装和基本配置 本例程中在MAC上安装使用的虚拟机Ubuntu系统(64位,desktop): 基本配置 考虑到以后涉及到hadoop的应用便于权限的管理,特别地创建一个ha ...
- py基础2--列表,元祖,字典,集合,文件
本节内容 列表.元祖操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 三元运算&生成式&成员运算&解压法&队列堆栈&数据类型转换 1. 列表操作 ...
- 《Java核心技术》 -- 读书笔记 ② - 类 | 对象 | 接口
对象vs对象变量 “对象” 描述的是一个类的具体实例,他被java虚拟机分配在 "堆" (Heap)中. “对象变量” 为一个对象的引用(对象变量的值=记载着具体对象的位置/地址) ...
- 【UVa】1606 Amphiphilic Carbon Molecules(计算几何)
题目 题目 分析 跟着lrj学的,理解了,然而不是很熟,还是发上来供以后复习 代码 #include <bits/stdc++.h> using namespace std; ; stru ...
- ERROR无法从静态上下文中引用非静态变量
ERROR无法从静态上下文中引用非静态变量 2012-06-16 20:58:52 分类: Java 什么是“static”? 学习过java.C++或C的人都应该认识这个关键字.用这个关键字修饰的变 ...