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个词汇进行保留,形成常用词词典.对于这个问题,我建立了 ...
随机推荐
- Python学习系列(八)( 面向对象基础)
Python学习系列(八)( 面向对象基础) Python学习系列(七)( 数据库编程) 一,面向对象 1,域:属于一个对象或类的变量.有两种类型,即实例变量—属于每个实例/类的对象:类变量—属于类 ...
- JavaFX 之自定义窗口标题栏(二)
一.问题场景 PC客户端登录界面仿QQ,上边显示图片,下边显示输入框和登录按钮.而JavaFX默认的窗口,不满足需求. 二.解决思路 隐藏窗口默认的标题栏,使用创建label对象,使用css将按钮图片 ...
- CStdioFile的Writestring无法写入中文的问题
解决UNICODE字符集下CStdioFile的Writestring无法写入中文的问题 2009-12-01 23:11 以下代码文件以CStdioFile向无法向文本中写入中文(用notepad. ...
- 基于INTEL FPGA硬浮点DSP实现卷积运算
概述 卷积是一种线性运算,其本质是滑动平均思想,广泛应用于图像滤波.而随着人工智能及深度学习的发展,卷积也在神经网络中发挥重要的作用,如卷积神经网络.本参考设计主要介绍如何基于INTEL 硬浮点的DS ...
- POJ2739(尺取法)
Sum of Consecutive Prime Numbers Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 23931 ...
- 【转】jMeter入门实例
人们对从认识事物都有一个具体到抽象的过程,学习Jmeter也不例外,通过一个实例来进行学习,一方面可以让初学者有所见即所得的信心,另一方面,其实也是在初学者心中留下了对这事物的一个朦胧的印象,这在以后 ...
- Tomcat的文件列表服务
今天需要将分析后的日志结果发布到网站上供其他人浏览,虽然用户可以通过直接使用url链接可以访问到对应的文件,但是毕竟还是不方便,没有一个类似文件浏览器的东西,可以直接查看文件夹和文件列表. 其实这样的 ...
- 【UVA】201 Squares(模拟)
题目 题目 分析 记录一下再预处理一下. 代码 #include <bits/stdc++.h> int main() { int t=0,s,n; while(scanf ...
- VMware 虚拟机中添加新硬盘的方法(转载)
随着在虚拟机中存储的东西的逐渐的增加,虚拟机的硬盘也逐渐告急,因此急需拓展一块新的虚拟磁盘.以下便是在VMware 中添加新的虚拟磁盘的方法: 一.VMware新增磁盘的设置步骤 (建议:在设置虚 ...
- Asp.net mvc 限制路由参数类型
routes.MapRoute( "Activity2", // 路由名称 "Activity/{id}&qu ...