一、进程
进程:一个程序要运行时所需的所有资源的集合
进程是资源的集合,相当于一个车间 一个进程至少需要一个线程,这个线程为主线程
一个进程里可以有多个线程 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基础的更多相关文章

  1. Python之路,Day4 - Python基础4 (new版)

    Python之路,Day4 - Python基础4 (new版)   本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 ...

  2. Python之路,Day1 - Python基础1

    本节内容 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入 模块初识 .pyc是个什么鬼? 数据类型初识 数据运算 表达式if ...else语 ...

  3. Python之路,Day10 - 异步IO\数据库\队列\缓存

    Python之路,Day9 - 异步IO\数据库\队列\缓存   本节内容 Gevent协程 Select\Poll\Epoll异步IO与事件驱动 Python连接Mysql数据库操作 RabbitM ...

  4. Python之路,Day1 - Python基础1(转载Alex)

    本节内容 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入 模块初识 .pyc是个什么鬼? 数据类型初识 数据运算 表达式if ...else语 ...

  5. Python之路,Day1 - Python基础1 --转自金角大王

    本节内容 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入 模块初识 .pyc是个什么鬼? 数据类型初识 数据运算 表达式if ...else语 ...

  6. Python之路,Day1 - Python基础1 介绍、基本语法、流程控制

    本节内容 1.python介绍 2.发展史 3.python 2.x or python 3.x ? 4.python 安装 5.第一个程序 Hello World 程序 6.变量 7.用户输入 8. ...

  7. python之路-Day10

    操作系统发展史介绍 进程.与线程区别 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者消费者模型 ...

  8. Python全栈day10(基础知识练习题)

    一,执行python的两种方式 1,写在脚本里面调用python执行,例如python test.py 2,  输入python在命令行交互执行,例如 python  >>> pri ...

  9. Python之路:Python简介

    Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间他为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承 ...

  10. Python之路:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy

    Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...

随机推荐

  1. js 布尔值作为开关判断

    var flag = true; $("#more_info").click(function() { if( flag ){ $("#more_xl_more" ...

  2. [解决方案] pythonchallenge level 4

    http://www.pythonchallenge.com/pc/def/linkedlist.php 查看页面源代码或者点击图片 http://www.pythonchallenge.com/pc ...

  3. Java的多态

    多态的定义: 同一种行为,在不同对象上有不同的表现形式 实现多态的条件: 要有继承 要有方法的重写 要有父类的引用指向子类的对象 代码如下: public class Animal { String ...

  4. UE4 UriEncode 问题

    当Uri 路径中带中文字符时,需要进行编码 否则会照成不可预见错误: FString temp = FGenericPlatformHttp::UrlEncode(queryStr); FString ...

  5. android接入微信分享(朋友、朋友圈)、QQ分享(好友、空间)

    1.申请注册你的appid 2.下载sdk QQ: http://wiki.open.qq.com/wiki/mobile/SDK%E4%B8%8B%E8%BD%BD 微信:https://open. ...

  6. Spring之实现任务调度

    现实生活中,我们经常会制定一些"任务"在什么时间完成什么事情.同样在各种的企业中也会遇到这种任务调度的需求,比如商家或者网站的月报表 之类的要在每个月的最后一天统计各种数据,备份每 ...

  7. iOS: How To Make AutoLayout Work On A ScrollView

    iOS: How To Make AutoLayout Work On A ScrollView Posted on June 11th, 2014 Ok, I’ll admit. I’ve been ...

  8. [WPF]GridView或DataGrid中自定义样式:依据某一列设定其对应行的样式(背景色,字体等)

    附效果照一张: 本方法使用StyleSelector来 获得依据自定义逻辑的style. ① class ConditionalStyleSelector : StyleSelector { publ ...

  9. Character Timing for T=0

    The minimum interval between the leading edges of the start bits of two consecutive characters sent ...

  10. MySQL开启general_log跟踪sql执行记录

    # 设置general log保存路径 # 注意在Linux中只能设置到 /tmp 或 /var 文件夹下,设置其他路径出错 # 需要root用户才有访问此文件的权限 mysql>set glo ...