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应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...
随机推荐
- iOS架构师之路:慎用继承
最近在看大神Casa的文章<跳出面向对象思想(一) 继承>,脑洞大开.文章给我们展示了一个随着产品需求不断变化的例子,该例子中通过继承实现不同页面的搜索视图和搜索逻辑的代码复用,随着产品需 ...
- cookie 保存上次访问url方法
if (Session[Enums.UserInfoSeesion] == null) { HttpCookie cookie = Request.Cookies[Enums.UserLastAcce ...
- SQL高级查询——50句查询(含答案) ---参考别人的,感觉很好就记录下来留着自己看。
--一个题目涉及到的50个Sql语句 --(下面表的结构以给出,自己在数据库中建立表.并且添加相应的数据,数据要全面些. 其中Student表中,SId为学生的ID) ---------------- ...
- Request.ServerVariables 获取服务器或者客户端信息
本机ip[客户端]:request.servervariables("remote_addr") 从哪个页面转到当前页面的:Request.ServerVariables(&quo ...
- jdk安装及环境变量配置
JDK是 Java 语言的软件开发工具包,主要用于移动设备.嵌入式设备上的java应用程序.JDK是整个java开发的核心,它包含了JAVA的运行环境,JAVA工具和JAVA基础的类库. jdk下载地 ...
- 亲身试用python简单小爬虫
前几天基友分享了一个贴吧网页,有很多漂亮的图片,想到前段时间学习的python简单爬虫,刚好可以实践一下. 以下是网上很容易搜到的一种方法: #coding=utf-8 import urllib i ...
- UE4蓝图编程的第一步
认识UE4蓝图中颜色与变量类型: UE4中各个颜色对应着不同的变量,连接点和连线的颜色都在表示此处是什么类型的变量.对于初学者来说一开始看到那么多连接点, 可能会很茫然,搞不清还怎么连,如果知道了颜色 ...
- Java里面,反射父类里面数字类型字段,怎么set值
Java里面,反射父类里面数字类型字段,怎么set值,我的做法是这样: /** * TODO 直接设置对象属性值, 忽略private/protected 修饰符, 也不经过setter * @aut ...
- navicat在ubuntu下中文乱码的真正解决方法ZT
乱码解决方法(自己解决我自己这种情况之后打猜测): 打开start_navicat文件,会看到 export LANG="en_US.UTF-8" 将这句话改为 export LA ...
- 2014 项目中用到batik
现在手头上的项目用到batik编程,用的maven管理jar包,要在pom.xml中dependencies标签下添加一下配置(batik编程使用的顶层jar包) <dependency> ...