目标:

  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. 高并发的epoll+线程池,线程池专注实现业务

    我们知道,服务器并发模型通常可分为单线程和多线程模型,这里的线程通常是指“I/O线程”,即负责I/O操作,协调分配任务的“管理线程”,而实际的请求和任务通常交由所谓“工作者线程”处理.通常多线程模型下 ...

  2. kubernetes简单示例

    1. 安装 yum install -y etcd kubernetes 2. 启动 systemctl start etcd systemctl start docker systemctl sta ...

  3. 1DAY 初识Python

    一 本节目标 了解编程语言 了解python及与其他语言的优劣对比 安装python解释器及环境变量配置.运行python交互式环境 打印hello world程序 初识变量.用户输入,流程控制,wh ...

  4. 【Leetcode 167】Two Sum II - Input array is sorted

    问题描述:给出一个升序排列好的整数数组,找出2个数,它们的和等于目标数.返回这两个数的下标(从1开始),其中第1个下标比第2个下标小. Input: numbers={2, 7, 11, 15}, t ...

  5. POJ1273(最大流入门)

    Drainage Ditches Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 70333   Accepted: 2733 ...

  6. linux安装oracle12c

    参考: https://blog.csdn.net/who__are__you_/article/details/79178303 记录:

  7. python 线程/进程模块

    线程的基本使用: import threading # ###################### 1.线程的基本使用 def func(arg): print(arg) t = threading ...

  8. 第八章 搭建hadoop2.2.0集群,Zookeeper集群和hbase-0.98.0-hadoop2-bin.tar.gz集群

    安装配置jdk,SSH 一.首先,先搭建三台小集群,虚拟机的话,创建三个 下面为这三台机器分别分配IP地址及相应的角色:集群有个特点,三台机子用户名最好一致,要不你就创建一个组,把这些用户放到组里面去 ...

  9. Oracle数据库学习笔记(一)

      Oracle的体系结构大体上分为两部分:Instance(实例)和Database(数据库). Instance(实例) :在Oracle Instance中主要包含了SGA以及一些进程(例如:P ...

  10. Java死锁以及命令检测

    Java每个对象都有一把锁,当前进程使用对象锁1,没有释放该锁,又想要去获取另一把对象锁2,而对象锁2被另外一个线程持有,没有释放,这就很容易出现死锁 1.死锁实例 public class Dead ...