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应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...
 
随机推荐
- AFNetworking3.0使用
			
AFHTTPSessionManager: 根据这个对象可以对请求千设置一些参数和状态 //得到一个session manager AFHTTPSessionManager *manager = [A ...
 - Hadoop YARN中内存的设置
			
在YARN中,资源管理由ResourceManager和NodeManager共同完成,其中,ResourceManager中的调度器负责资源的分配,而NodeManager则负责资源的供给和隔离.R ...
 - SQL Server 简介
			
什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库.是以一定方式储存在一起.能为多个用户共享.具有尽可能小的冗余度的特点.是与应用程序彼此独立的数据集合. SQL S ...
 - android中所有颜色大全
			
< ?xml version="1.0" encoding="utf-8" ?> < resources>< colo ...
 - BZOJ 4521 手机号码
			
SB数位dp. 我的貌似要特判9999999999的情况. #include<iostream> #include<cstdio> #include<cstring> ...
 - UE4 VR GUI实现 参考(UMG AND VR)
			
Note:4.13以后版本VR UI采用 WidgetComponent + WidgetInteractionComponent可轻松实现交互 Blueprint Demo: https://for ...
 - 使用 UnrealPak.exe 创建 Pak文件方法
			
看来各位摸UE4 的基佬们,也是被DLC搞得不要不要的呢,其实热更新PAK是很简单就可以实现的,虽然当时我也是弄了快一个月. 下面贴一段以前在 Runtime 状态下 Mount Pak的代码,希望能 ...
 - typedef关键字
			
1. typedef的作用 在计算机编程语言中用来为复杂的声明定义简单的别名,与宏定义有些差异.它本身是一种存储类的关键字,与auto.extern.static.register等关键字不能出现在同 ...
 - PCH文件
			
作用:xcode5 自带的一个文件,xcode以后这个文件需要自己手动创建(这个是xcode5 和xcode6最大的区别)提前编译文件,一般情况下.我们在pch文件中#import一些项目中常用的软件 ...
 - UItableVIew初探
			
UItableView style/* //普通 UITableViewStylePlain, //分组 UITableViewStyleGrouped*/ //表格视图 UITable ...