目标:

  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. 【转】Linux 静态库与共享库的使用

    原文网址:http://blog.csdn.net/heyabo/article/details/11688517 申明: 正如题如示,本篇讲的是Linux下是静态库与共享库,而Window下的动态链 ...

  2. Spring Boot和Spring cloud

    微服务框架SpringBoot简单验证 首先摘录部分IBM网站部分内容对框架做一个简单说明 http://www.ibm.com/developerworks/cn/java/j-lo-spring- ...

  3. java代码数组求平均值,最大值,最小值

    (测试类) package com.badu; public class Tste { public static void main(String[] args) { Class5 sa=new C ...

  4. PyQt5对话框

    QinputDialog 输入的值可以是字符串,数字,或者一个项目从一个列表 def showDialog(self): text, ok = QInputDialog.getText(self, ' ...

  5. 简单IOCP例子

    使用IOCP模型编程的优点 ① 帮助维持重复使用的内存池.(与重叠I/O技术有关) ② 去除删除线程创建/终结负担. ③ 利于管理,分配线程,控制并发,最小化的线程上下文切换. ④ 优化线程调度,提高 ...

  6. 【洛谷】P1892 团伙(并查集)+ 求助

    题目描述 1920年的芝加哥,出现了一群强盗.如果两个强盗遇上了,那么他们要么是朋友,要么是敌人.而且有一点是肯定的,就是: 我朋友的朋友是我的朋友: 我敌人的敌人也是我的朋友. 两个强盗是同一团伙的 ...

  7. SHUTDOWN: waiting for active calls to complete

    Problem Description: ====================  You are attempting to shut down the database and the data ...

  8. 如何实现session共享

    http://www.cnblogs.com/xiehuiqi220/p/3592300.html 首先我们应该明白,为什么要实现共享,如果你的网站是存放在一个机器上,那么是不存在这个问题的,因为会话 ...

  9. Python curses getch()

    window.getch([y, x]) Get a character. Note that the integer returned does not have to be in ASCII ra ...

  10. 【转】浅析VO、DTO、DO、PO的概念、区别和用处

    原文地址:http://blog.csdn.net/zjrbiancheng/article/details/6253232 概念: VO(View Object):视图对象,用于展示层,它的作用是把 ...