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应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...
随机推荐
- @font-face 的用法
现在很多设计用的字体都是五花八门的.我们切图又不能很好的让搜索爬虫搜索.就会使用@font-face方法: @Font-face目前浏览器的兼容性: Webkit/Safari(3.2+):TrueT ...
- HYSBZ 2243
//Accepted 18440 KB 5556 ms /* source:HYSBZ 2243 time :2015.5.29 by :songt */ /*题解: 树链剖分 */ #include ...
- .net core 学习笔记(2)-中间件
小项目中有个操作日志的功能,主要是记录用户对修改数据的操作进行记录,记录的内容包括 访问的控制器和方法,以及控制器方法中接收的参数,操作用户,及操作IP等信息,最开始是用ActionFilterAtt ...
- Python学习路程day20
本节内容: 项目:开发一个简单的BBS论坛 需求: 整体参考“抽屉新热榜” + “虎嗅网” 实现不同论坛版块 帖子列表展示 帖子评论数.点赞数展示 在线用户展示 允许登录用户发贴.评论.点赞 允许上传 ...
- volatile关键字和mutable关键字
如果不用volatile关键字会如何?可能会造成一个后果就是:编译器发现你多次使用同一个变量的值,然后它可能会假设这个变量是不变的值,并且把这个变量的值放入寄存器中,方便下一次使用,提高存取速度. 一 ...
- 题目1203:IP地址
题目: http://ac.jobdu.com/problem.php?pid=1203 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3052 解决:1504 题目描述: 输入一个ip地 ...
- 深入理解css系列:meta标签
积累太少,时间管理技巧欠缺,所以导致了博客更新的速度迟缓.学习中成长,成长中学习.加油吧!最近在做h5的项目,对于meta标签层出不穷的各式属性值有点头晕,所以查资料整理了下. 关键字:meta na ...
- PHP中CURL方法curl_setopt()函数的一些参数
bool curl_setopt (int ch, string option, mixed value)curl_setopt()函数将为一个CURL会话设置选项.option参数是你想要的设置,v ...
- C# 字符编码类Encoding
在网络通信中,很多情况下都是将字符信息转成字节序列进行传输.将字符序列转为字节序列的过程称为编码.当这些字节传送到接收方,接收方需要逆向将字节序列转为字符序列.这个过程就是解码. 常见编码有ASCII ...
- do while 和 while 的区别
package review20140419;/* * do while 和 while 的区别 */public class Test3 { //程序的入口 public static ...