潭州课堂25班:Ph201805201 并发(进程,线程) 第十一课 (课堂笔记)
线程,进程,是实现并发的方法,
并行:
在同一时刻,同时运行多个任务,CPU 的数量大于等于任务数量,
并发:
在同一时间间隔内, 同时处理多个任务,
并行是并发。
进程:表示一个正在执行的程序,
操作系统负责其上所有的执行
多进程
import multiprocessing
# from multiprocessing import process
import time # 模拟一个好使任务 print('a:',time.asctime(time.localtime(time.time()))) def func():
print('b:',time.asctime(time.localtime(time.time())))
time.sleep(5)
print('c:',time.asctime(time.localtime(time.time()))) # 进程实例 Process( target=func ,args=)
p = multiprocessing.Process( target=func )
p.start() # 启动 time.sleep(5)
print('d:',time.asctime(time.localtime(time.time())))
# 相当于两个 time.sleep(5) 同时运行

多个进程:
for i in range(30):
p = multiprocessing.Process( target=func )
p.start()
多进程并行的必要条件:
总进程数理不多于 CPU 核心数量
所以,现在运行的程序都是轮询调度产生的,
但在 python 层面的确获得了并行,
多线程实现并发:
线程,是执行的最小单元 ,多线程:是一个进程 中同时开户多个线程,线程可以被中断,也可以被挂起
GIL锁,在 python 里,一个进程一次只能有一个线程运行,
进程:进程当中最少有一个线程,是操作系统分配资源的基本单位,
线程:
# import multiprocessing # 进程
from threading import Thread # 线程对象
import time # 模拟一个好使任务 print('a:',time.asctime(time.localtime(time.time()))) def func():
print('b:',time.asctime(time.localtime(time.time())))
time.sleep(5)
print('c:',time.asctime(time.localtime(time.time()))) # 进程实例 Process( target=func ,args=) p = Thread( target=func )
p.start() # 启动 time.sleep(5)
print('d:',time.asctime(time.localtime(time.time())))
# 相当于两个 time.sleep(5) 同时运行

当线程遇到阻塞,睡眠,就会切换运行
在 linux 中
import os,time pid = os.fork() # 只要执行这个方法,就会COPY一个新的进程
if pid == 0:
print('子进程',pid) # 永远是 0
else:print('父进程 ',pid) # 返回的是子进程的 pid 值,
time.sleep(0.1)

因为两个进程都执行,同时两个成立,
多进程实现并发
# 多进程实现并发,
from socket import *
from multiprocessing import Process server = socket()
server.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) # 重用端口
server.bind(('127.0.0.1', 10001))
server.listen(5) def fun(conn):
while True:
try:
r = conn.recv(1024)
if not r: break
conn.send(r)
except Exception:
break if __name__ == '__main__': # windows下
while True:
conn, addr = server.accept()
p = Process(target=fun, args=(conn,))
p.start()
多线程实现并发
# 多进程实现并发,
from socket import *
from threading import Thread server = socket()
server.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) # 重用端口
server.bind(('127.0.0.1', 10001))
server.listen(5) def fun(conn):
while True:
try:
r = conn.recv(1024)
if not r: break
conn.send(r)
except Exception:
break if __name__ == '__main__': # windows下
while True:
conn, addr = server.accept()
p = Thread(target=fun, args=(conn,))
p.start()
潭州课堂25班:Ph201805201 并发(进程,线程) 第十一课 (课堂笔记)的更多相关文章
- 潭州课堂25班:Ph201805201 WEB 之 页面编写 第四课 登录注册 (课堂笔记)
index.html 首页 <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...
- 潭州课堂25班:Ph201805201 WEB 之 页面编写 第三课 (课堂笔记)
index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- 潭州课堂25班:Ph201805201 WEB 之 页面编写 第二课 (课堂笔记)
index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- 潭州课堂25班:Ph201805201 WEB 之 页面编写 第一课 (课堂笔记)
index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- 潭州课堂25班:Ph201805201 第十课 类的定义,属性和方法 (课堂笔记)
类的定义 共同属性,特征,方法者,可分为一类,并以名命之 class Abc: # class 定义类, 后面接类名 ( 规则 首字母大写 ) cls_name = '这个类的名字是Abc' # 在类 ...
- 潭州课堂25班:Ph201805201 并发(进程与线程池) 第十四课 (课堂笔记)
循环执行一个线程 # -*- coding: utf-8 -*- # 斌彬电脑 # @Time : 2018/7/20 0020 5:35 import threading import queue ...
- 潭州课堂25班:Ph201805201 并发(进程,线程)二 第十二课 (课堂笔记
线程与进程的其他相关操作 import threading # 线程 import multiprocessing # 进程 import socket import time def wo(): g ...
- 潭州课堂25班:Ph201805201 并发(协程) 第十五课 (课堂笔记)
#斐波那契 def fid(n): res = [] indx = 0 a = 0 b = 1 while indx < n : res.append(b) a,b = b,a+b indx + ...
- 潭州课堂25班:Ph201805201 并发(通信) 第十三课 (课堂笔记)
from multiprocessing import Process # 有个 url 列表 ,有5个 url ,一次请求是1秒,5个5秒 # 要求1秒把 url 请求完, a = [] # 在进程 ...
随机推荐
- MR运动静止用户区分
1.客户端打开菜单[MR]-[MR室内室外判定设置] 设置主小区是室外站且主小区信号比较强时RSRP门限 2.设置"上报数据用户临小区切换次数门限设置"值为15 mysql中t_m ...
- 【Connection Events】【BLE】【原创】
Connection Events 本人在TI官网的学习笔记,现整理如下 两台BLE设备建立连接后,所有的通信事件都是通过Connection Events中发生的 上图为两 ...
- XAF 与 CIIP
XAF 与 CIIP:网站:http://www.uims.top, XAF技术博客:http://www.cnblogs.com/foreachlife/ tylike 升级到 DevExpres ...
- JS实现双击内容变为可编辑状态
在一些网站上我们经常看到交互性很强的功能.一些用户资料可以直接双击出现文本框,并在此输入新的资料即可修改,无需再按确定按钮等.. 我在网上查了很多资料,但都有一个小bug,就是当获取焦点后,光标的位置 ...
- git 的入门使用到团队协作
1.git 的安装.下载---安装,esay. 下载地址:https://git-for-windows.github.io/ 2.创建一个自己的身份 git config --global user ...
- centos7.2环境中kettle环境搭建及任务推送配置详解
目标:将mysql5.5中testdb1的ehr_user表推送到tdoa的ehr_user表中,为避免不必要的麻烦,两张表结构.编码,包括数据库编码保持一致 操作系统:centos7.2 kettl ...
- vim使用案例
1. 请在 /tmp 这个目录下建立一个名为 vitest 的目录: 2. 进入 vitest 这个目录当中: 3. 将 /etc/man.config 复制到本目录底下(或由上述的连结下载 man. ...
- STM32应用实例七:与宇电设备实现AI-BUS通讯
宇电的设备使用基于RS-485的自定义协议,协议本身比较简单,只有2条指令: 读:地址代号+52H(82) +要读的参数代号+0+0+校验码 写:地址代号+43H(67)+要写的参数代号+写入数低字节 ...
- vue之导入Bootstrap以及jQuery的两种方式
Vue引入bootstrap主要有两种方法 方法一:在main.js中引入,此方法导入的bootstrap中对于html,body的一些预设置的css样式可能无效. 一.引入jQuery 在当前项目的 ...
- python 全栈开发,Day85(Git补充,随机生成图片验证码)
昨日内容回顾 第一部分:django相关 1.django请求生命周期 1. 当用户在浏览器中输入url时,浏览器会生成请求头和请求体发给服务端 请求头和请求体中会包含浏览器的动作(action),这 ...