Python之路,day10-Python基础
一、进程
进程:一个程序要运行时所需的所有资源的集合
进程是资源的集合,相当于一个车间 一个进程至少需要一个线程,这个线程为主线程
一个进程里可以有多个线程 cpu cores越多,代表着你可以真正并发的线程越多 2个进程之间的数据是完全独立的,互相不能访问
1.进程lock
from multiprocessing import Process, Lock def f(l, i):
l.acquire()
try:
print('hello world', i)
finally:
l.release() if __name__ == '__main__':
lock = Lock() for num in range(10):
Process(target=f, args=(lock, num)).start()
2.进程池
from multiprocessing import Process, Lock,Pool
import time def f(i):
# l.acquire()
# try:
print('hello world %s'%i)
time.sleep(1)
# finally:
# l.release()
return i def Bar(data):
print(data)
if __name__ == '__main__':
lock = Lock()
pool = Pool(processes=5)
for num in range(10):
# Process(target=f, args=(lock, num)).start()
pool.apply_async(func=f,args=(num,),callback=Bar)
pool.close()
pool.join()
3.进程间通信
from multiprocessing import Process, Queue def f(q):
q.put([42, None, 'hello']) if __name__ == '__main__':
q = Queue()
p = Process(target=f, args=(q,))
p.start()
print(q.get()) # prints "[42, None, 'hello']"
p.join()
3.多进程
from multiprocessing import Process
import time def f(name):
time.sleep(2)
print('hello', name) if __name__ == '__main__':
for i in range(10):
p = Process(target=f, args=('bob',))
p.start()
# p.join()
二、线程
线程:
一个单一的指令的控制流,寄生在进程中 单一进程里的多个线程是共享数据的 多线程在涉及修改同一数据时一定要加锁 自己总结:(宏观并发,时间片切换比进程快),多核编程
1.线程
import threading
import time
def run(n):
time.sleep(1)
# print(threading.get_ident())
print("thread",n)
print(threading.current_thread())
for i in range(10):
t = threading.Thread(target=run, args=(i,))
t.start()
# t.setName(i)
print(t.getName()) print(threading.active_count())
# t = threading.Thread(target=run,args=(1,))
# t.start()
# t2 = threading.Thread(target=run,args=(2,))
# t2.start()
print(threading.current_thread())
time.sleep(1.5) print(threading.active_count())
2.线程lock.py
import threading
import time
def run(n):
global num
l.acquire()#获取锁
num = num + 1
time.sleep(1)
l.release()#释放锁
print(num)
# print("thread",n)
def run2():
count = 0
while num < 9:
print('---', count)
count +=1 l = threading.Lock() #定义锁 num = 0
t_list = []
for i in range(10):
t = threading.Thread(target=run, args=(i,))
t.start()
t_list.append(t)
t2 = threading.Thread(target=run2)
t2.start() for t in t_list:
t.join() print('----main Thread----')
print(num)
3.线程等待
import threading
import time
def run(n):
time.sleep(1)
print("thread",n) t_list = [] for i in range(10):
t = threading.Thread(target=run, args=(i,))
t.start()
t_list.append(t)
# t.join()
for t in t_list:
t.join() print('----main Thread----')
生产者消费者的两个主要作用
1.程序的解耦合,异步
2.提高了程序的运行效率
import threading
import queue
import time
def consumer(name): while True:
print("%s 取到骨头[%s]吃了" %(name,q.get()))
time.sleep(0.5)
q.task_done()
def producer(name):
count = 0
# while q.qsize() < 5:
for i in range(10):
print("%s生成了骨头"%name,count)
q.put(count)
count +=1
time.sleep(0.3)
q.join()
print("------chiwan--------")
q = queue.Queue(maxsize = 4) p = threading.Thread(target=producer,args=('alex',))
# p2 = threading.Thread(target=producer,args=('aaa',))
c = threading.Thread(target=consumer,args=('qqq',))
p.start()
# p2.start()
c.start()
Python之路,day10-Python基础的更多相关文章
- Python之路,Day4 - Python基础4 (new版)
Python之路,Day4 - Python基础4 (new版) 本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 ...
- Python之路,Day1 - Python基础1
本节内容 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入 模块初识 .pyc是个什么鬼? 数据类型初识 数据运算 表达式if ...else语 ...
- Python之路,Day10 - 异步IO\数据库\队列\缓存
Python之路,Day9 - 异步IO\数据库\队列\缓存 本节内容 Gevent协程 Select\Poll\Epoll异步IO与事件驱动 Python连接Mysql数据库操作 RabbitM ...
- Python之路,Day1 - Python基础1(转载Alex)
本节内容 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入 模块初识 .pyc是个什么鬼? 数据类型初识 数据运算 表达式if ...else语 ...
- Python之路,Day1 - Python基础1 --转自金角大王
本节内容 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入 模块初识 .pyc是个什么鬼? 数据类型初识 数据运算 表达式if ...else语 ...
- Python之路,Day1 - Python基础1 介绍、基本语法、流程控制
本节内容 1.python介绍 2.发展史 3.python 2.x or python 3.x ? 4.python 安装 5.第一个程序 Hello World 程序 6.变量 7.用户输入 8. ...
- python之路-Day10
操作系统发展史介绍 进程.与线程区别 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者消费者模型 ...
- Python全栈day10(基础知识练习题)
一,执行python的两种方式 1,写在脚本里面调用python执行,例如python test.py 2, 输入python在命令行交互执行,例如 python >>> pri ...
- Python之路:Python简介
Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间他为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承 ...
- Python之路:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy
Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...
随机推荐
- web浏览器兼容简要整理
ajax的创建 if (window.XMLHttpRequest) { var xhr = new XMLHttpRequest(); } else { //IE6及其以下版本浏览器 var xhr ...
- poj3693
//Accepted 12004 KB 407 ms /* source:poj3693 time :20150819 by :songt */ /*题解: 搞了一天,总算弄完了 首先,我们来明确一个 ...
- C++的默认构造函数与构造函数
今天看书,忽然发现自己对默认构造函数/构造函数的理解很模糊,在实际项目中写类时,这些细节问题并没有涉及到.因此,就专门对着<C++ Primer Plus>将默认构造函数/构造函数这一块简 ...
- IOS BLE蓝牙4.0
前言: 自己做的项目里面有这么一个功能,总结归纳一下. 先导入必要的框架 CoreBluetooth.framework 在要用到蓝牙的文件里面导入以下头文件 #import <CoreBlu ...
- 自定义属性的时候,尽量不要使用value这个命名
最近我在重写select下拉组件时,使用ul->li来模拟select中的一个个option,并给li添加索引,取名为value. 非IE浏览器下value值工作正常,但是IE下value值工作 ...
- URL重写 urlrouting
在global文件中添加以下的代码 <%@ Import Namespace="System.Web.Routing" %> <script RunAt=&quo ...
- 通过ajax 后台传递的 区域id 选中ztree的节点 并展开节点
代码如下: < script type = "text/javascript" > var flag = "<%=request.getParam ...
- 利用NABCD模型进行竞争性需求分析
微博的NABCD模型 N-Need:毫无疑问,当今的中国普通民众是有这点需求的,在上个世纪中国民众的休闲娱乐方式更多的停留在以电视传媒为主的娱乐方式,而进入21世纪以来中国民众的娱乐中心向互联网转移, ...
- select2插件
引入select2插件<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/css/select2.min. ...
- (转)CSS中的绝对定位与相对定位定位
层级关系为: <div ——————————— position:relative; 不是最近的祖先定位元素,不是参照物<div—————————-没有设置为定位元素,不是参照物<d ...