一 进程:

# 什么是进程 : 运行中的程序,计算机中最小的资源分配单位
# 程序开始执行就会产生一个主进程
# python中主进程里面启动一个进程 —— 子进程
# 同时主进程也被称为父进程
# 父子进程之间的代码执行是异步的,各自执行自己的
# 父子进程之间的数据不可以共享
# 主进程会等待子进程结束之后再结束 二例子
#开启一个子进程
 import os
import time
from multiprocessing import Process
def func(num):
print(num,os.getpid())
time.sleep(0.5)
print(num,os.getpid())
time.sleep(0.5)
if __name__ == '__main__':
p=Process(target=func,args=(10,))
p.start()
print(os.getpid(),0)
time.sleep(1)
print(os.getpid(),1)

##父进程和子进程数据不可以共享,打印n为100

 n=100
def func():
global n
n=0
print('------')
time.sleep(3)
if __name__ == '__main__':
Process(target=func).start()
time.sleep(1)
print(n) 结果:打印n为100

#开启多个子进程

 def func(n):
time.sleep(1)
print('_'*n)
if __name__ == '__main__':
l=[]
for i in range(10):
p=Process(target=func,args=(i,))
p.start()
l.append(p) print('子进程开始了')
for p in l:p.join()
print('10条信息已经发送完毕')

#守护进程

# 守护进程也是一个子进程
# 当主进程的代码执行完毕之后自动结束的子进程叫做守护进程
#当主进程结束的时候守护进程才结束
例子一:
 def deamon_func(): #守护进程
while True:
print('我还活着')
time.sleep(0.5)
def wahaha():#子进程
for i in range(10):
time.sleep(1)
print(i*'#')
if __name__ == '__main__':
p2=Process(target=wahaha)
p2.start()
p=Process(target=deamon_func) #守护进程
p.daemon=True
p.start()
for i in range(3): #主进程
print(i*'*')
time.sleep(1)
当主进程执行完之后,deamon_func也就停止打印了
 def deamon_func():
while True:
print('我还活着')
time.sleep(0.5)
def wahaha():
for i in range(10):
time.sleep(1)
print(i*'#')
if __name__ == '__main__':
p2=Process(target=wahaha)
p2.start()
p=Process(target=deamon_func) #这个是守护进程
p.daemon=True
p.start()
for i in range(3): #主进程
print(i*'##')
time.sleep(1)
p2.join() 这个是当wahaha里面的执行完毕了,守护进程才结束

总结

# 开启一个子进程 start
# 子进程和主进程是异步
# 如果在主进程中要等待子进程结束之后再执行某段代码:join
# 如果有多个子进程 不能在start一个进程之后就立刻join,把所有的进程放到列表中,等待所有进程都start之后再逐一join
# 守护进程 —— 当主进程的"代码"执行完毕之后自动结束的子进程叫做守护进程
二 进程池
#提交任务的两种方式:
#同步调用:提交完任务后,就在原地等待,等待任务执行完毕,拿到任务的返回值,才能继续下一行代码,导致程序串行执行
#异步调用+回调机制:提交完任务后,不在原地等待,任务一旦执行完毕就会触发回调函数的执行, 程序是并发执行
#异步调用

 1 from concurrent.futures import ProcessPoolExecutor
 def task(n):
print('%s is runing'%os.getpid())
time.sleep(random.randint(1,3))
return n**2
def handle(res):
res=res.result()
print('handle res %s' %res)
if __name__ == '__main__':
pool=ProcessPoolExecutor(2) #开启2个进程,每次执行2个
for i in range(5):
obj=pool.submit(task,i)
obj.add_done_callback(handle) pool.shutdown()
print('主') 打印结果:12800 is runing
6264 is runing
6264 is runing
handle res 1
12800 is runing
handle res 0
6264 is runing
handle res 4
handle res 16
handle res 9
#同步调用,从上到下依次执行
 1  from concurrent.futures import ProcessPoolExecutor
 def task(n):
print('%s is runing'%os.getpid())
time.sleep(random.randint(1,3))
return n**2
def handle(res):
print('handle res %s' %res)
if __name__ == '__main__':
pool=ProcessPoolExecutor(3)
for i in range(5):
res=pool.submit(task,i).result()
handle(res)
pool.shutdown()
print('主') 执行结果:
16128 is runing
handle res 0
17120 is runing
handle res 1
7060 is runing
handle res 4
16128 is runing
handle res 9
17120 is runing
handle res 16
三 socketserver(用的就是多进程)
服务端:
 import time
import socketserver
class Myserver(socketserver.BaseRequestHandler):
def handle(self):
conn = self.request
print(conn)
time.sleep(3)
conn.send(b'hello')
time.sleep(5)
conn.send(b'hello2')
# socketserver
# socket myserver = socketserver.ThreadingTCPServer(('127.0.0.1',9000),Myserver)
myserver.serve_forever() # socketserver所启动的服务端是不能有input操作的
# server端一般都是根据client端的要求去执行固定的代码

客户端:

 import socket
sk=socket.socket()
sk.connect(('127.0.0.1',9000))
print(sk.recv(1024))
print(sk.recv(1024))
sk.close()

9-1进程,进程池和socketserver的更多相关文章

  1. 并发编程(六)--进程/线程池、协程、gevent第三方库

    一.进程/线程池 1.进程池 (1)什么是进程池 如果需要创建的子进程数量不大,可以直接利用multiprocess中的Process来创建.但是当需要创建上百个或上千个,手动创建就较为繁琐,这时就可 ...

  2. python基础-12 多线程queue 线程交互event 线程锁 自定义线程池 进程 进程锁 进程池 进程交互数据资源共享

    Python中的进程与线程 学习知识,我们不但要知其然,还是知其所以然.你做到了你就比别人NB. 我们先了解一下什么是进程和线程. 进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CP ...

  3. 并发编程(六)——进程/线程池、协程、gevent第三方库

    进程/线程池.协程.gevent第三方库 一.进程/线程池 1.进程池 (1)什么是进程池 如果需要创建的子进程数量不大,可以直接利用multiprocess中的Process来创建.但是当需要创建上 ...

  4. 并发编程中死锁、递归锁、进程/线程池、协程TCP服务器并发等知识点

    1.死锁 定义; 类似两个人分别被囚禁在两间房子里,A手上拿着的是B囚禁房间的钥匙,而B拿着A的钥匙,两个人都没法出去,没法给对方开锁,进而造成死锁现象.具体例子代码如下: # -*-coding:u ...

  5. python语法基础-并发编程-进程-进程理论和进程的开启

    ############################################## """ 并发编程的相关概念: 进程 1,运行中的程序,就是进程,程序是没有生 ...

  6. 1.Linux进程--进程标识号

    函数原型 pid_t fork(void); fork的奇异之处在于它被调用一次,却返回两次,它可能有三种不同的返回值: 1.在父进程中.fork返回新创建的子进程的PID 2.在子进程中,fork返 ...

  7. Operating System-Process(1)什么是进程&&进程的创建(Creation)&&进程的终止(Termination)&&进程的状态(State)

    本文阐述操作系统的核心概念之一:进程(Process),主要内容: 什么是进程 进程的创建(Creation) 进程的终止(Termination) 进程的状态(State) 一.什么是进程 1.1 ...

  8. python之进程(池)

    获得进程id import osfrom multiprocessing import Process def info(title): print(title) print('模块名:',__nam ...

  9. 进程&进程池

    进程 服务器中, s.listen(n) n不能无限大,以为内存不可能无限大,n表示内存同一时间接纳的等待连接数,可以看成一个(队列),取出一个拿去建立连接,然后再放进一个,队列中一直保持n个连接 请 ...

随机推荐

  1. 【笔记】LR中设置检查点

      我们为什么需要在LR中设置检查点?? 我们在录制编写脚本后,通常会进行回放,如果回放通过没有错误.我们就认为脚本是正确的.那么LR怎么区分脚本是否回放正确:基本上所有脚本回放错误都是因为 404错 ...

  2. 20190719-FirstZero

    这也许也是一个成就吧? First Zero 考试 第一次 爆0 好了好了. T1 你永远不知道你在想什么. 我仿佛想出一个$\Theta(NM\log^2 N)$的$dfs$??? 蒟蒻原地爆炸 T ...

  3. Hackerrank--Prime Sum

    题目链接 The problem is quite simple. You're given a number N and a positive integer K. Tell if N can be ...

  4. makefile 语法笔记 3

    这里说明了 在一些情况下 这也是可以使用通配符的 objects =*.o 这种情况是不会展开的 makefile 中的变量是C++/C 中的宏 如果希望展开,可以使用 $(wildcard *.o) ...

  5. java-静态-单例-继承

    概要图 一.静态 1.1 静态方法 创建对象就是为了产生实例,并进行数据的封装. 而调用功能时,确没有用到这些对象中封装的数据. 该对象的创建有意义吗?虽然可以编译并运行,但是在堆内存中空间较为浪费. ...

  6. 洛谷P1311 [NOIP2011提高组Day1T2]选择客栈

    P1311 选择客栈 题目描述 丽江河边有n 家很有特色的客栈,客栈按照其位置顺序从 1 到n 编号.每家客栈都按照某一种色调进行装饰(总共 k 种,用整数 0 ~ k-1 表示),且每家客栈都设有一 ...

  7. git出现“The file will have its original line endings in your working directory”错误

    一.现象: git add *时出现如下现象: The file will have its original line endings in your working directory 解决: G ...

  8. Minimal coverage (贪心,最小覆盖)

    题目大意:先确定一个M, 然后输入多组线段的左端和右端的端点坐标,然后让你求出来在所给的线段中能够 把[0, M] 区域完全覆盖完的最少需要的线段数,并输出这些线段的左右端点坐标. 思路分析: 线段区 ...

  9. Mybatis使用 爬坑记录

    1.mapper.xml可以直接 使用map集合, parameterType="java.util.Map" resultType="java.util.Map&quo ...

  10. 可复用且高度解耦的iOS用户统计实现

    http://www.cocoachina.com/ios/20160421/15912.html 本文为投稿文章,作者:编程小翁(简书) 用户统计 用户行为统计(User Behavior Stat ...