一 进程:

# 什么是进程 : 运行中的程序,计算机中最小的资源分配单位
# 程序开始执行就会产生一个主进程
# 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. MacBook 启用或停用 root 用户

    启用或停用 root 用户 选取苹果菜单 () >“系统偏好设置”,然后点按“用户与群组”(或“帐户”). 点按 ,然后输入管理员名称和密码. 点按“登录选项”. 点按“加入”(或“编辑”). ...

  2. hibernate hql语句 group by having 的坑

    我期望获得这个列表 然而,使用hql只能获得第一条数据,后来我琢磨了一下,和group by有关系 应该改成 成功查询到

  3. Oracle ORA-01861

    Oracle 插入时间时 报错:ORA-01861: 文字与格式字符串不匹配 的解决办法 解决方法:   这个错误一般出现在时间字段上,即你插入的时间格式和数据库现有的时间格式不一致,解决的方法是格式 ...

  4. Xcode8遇到的问题及解决方案!!!

    http://blog.csdn.net/jnbbwyth/article/details/52576169 http://www.cocoachina.com/ios/20161227/18451. ...

  5. NOIP模拟17.9.22

    NOIP模拟17.9.22 前进![问题描述]数轴的原点上有一只青蛙.青蛙要跳到数轴上≥

  6. Codeforces 451D

    题目链接 D. Count Good Substrings time limit per test 2 seconds memory limit per test 256 megabytes inpu ...

  7. 蚁群算法MATLAB解TSP问题

    Excel表exp12_3_1.xls中数据为: clc clear all [xdata,textdata]=xlsread('exp12_3_1.xls'); %加载20个城市的数据,数据按照表格 ...

  8. python csv文件打开错误:_csv.Error: line contains NULL byte

    当python读取文件出现_csv.Error: line contains NULL byte时, # -*- coding:utf-8 -*- import csv with open(r'E:\ ...

  9. LeedCode --- Best Time to Buy and Sell Stock

    题目链接 题意: find the maximum positive difference between the price on the ith day and the jth day 附上代码: ...

  10. Tool-图片压缩-腾讯智图:腾讯智图

    ylbtech-Tool-图片压缩-腾讯智图:腾讯智图 智图是腾讯ISUX前端团队开发的一个专门用于图片压缩和图片格式转换的平台,其功能包括针对png,jpeg,gif等各类格式图片的压缩,以及为上传 ...