1. 一、进程
    进程:一个程序要运行时所需的所有资源的集合
    进程是资源的集合,相当于一个车间
  2.  
  3. 一个进程至少需要一个线程,这个线程为主线程
    一个进程里可以有多个线程
  4.  
  5. cpu cores越多,代表着你可以真正并发的线程越多
  6.  
  7. 2个进程之间的数据是完全独立的,互相不能访问
    1.进程lock
  1. from multiprocessing import Process, Lock
  2.  
  3. def f(l, i):
  4. l.acquire()
  5. try:
  6. print('hello world', i)
  7. finally:
  8. l.release()
  9.  
  10. if __name__ == '__main__':
  11. lock = Lock()
  12.  
  13. for num in range(10):
  14. Process(target=f, args=(lock, num)).start()

2.进程池

  1. from multiprocessing import Process, Lock,Pool
  2. import time
  3.  
  4. def f(i):
  5. # l.acquire()
  6. # try:
  7. print('hello world %s'%i)
  8. time.sleep(1)
  9. # finally:
  10. # l.release()
  11. return i
  12.  
  13. def Bar(data):
  14. print(data)
  15. if __name__ == '__main__':
  16. lock = Lock()
  17. pool = Pool(processes=5)
  18. for num in range(10):
  19. # Process(target=f, args=(lock, num)).start()
  20. pool.apply_async(func=f,args=(num,),callback=Bar)
  21. pool.close()
  22. pool.join()

3.进程间通信

  1. from multiprocessing import Process, Queue
  2.  
  3. def f(q):
  4. q.put([42, None, 'hello'])
  5.  
  6. if __name__ == '__main__':
  7. q = Queue()
  8. p = Process(target=f, args=(q,))
  9. p.start()
  10. print(q.get()) # prints "[42, None, 'hello']"
  11. p.join()

3.多进程

  1. from multiprocessing import Process
  2. import time
  3.  
  4. def f(name):
  5. time.sleep(2)
  6. print('hello', name)
  7.  
  8. if __name__ == '__main__':
  9. for i in range(10):
  10. p = Process(target=f, args=('bob',))
  11. p.start()
  12. # p.join()
  1. 二、线程
    线程:
    一个单一的指令的控制流,寄生在进程中
  2.  
  3. 单一进程里的多个线程是共享数据的
  4.  
  5. 多线程在涉及修改同一数据时一定要加锁
  6.  
  7. 自己总结:(宏观并发,时间片切换比进程快),多核编程
    1.线程
  1. import threading
  2. import time
  3. def run(n):
  4. time.sleep(1)
  5. # print(threading.get_ident())
  6. print("thread",n)
  7. print(threading.current_thread())
  8. for i in range(10):
  9. t = threading.Thread(target=run, args=(i,))
  10. t.start()
  11. # t.setName(i)
  12. print(t.getName())
  13.  
  14. print(threading.active_count())
  15. # t = threading.Thread(target=run,args=(1,))
  16. # t.start()
  17. # t2 = threading.Thread(target=run,args=(2,))
  18. # t2.start()
  19. print(threading.current_thread())
  20. time.sleep(1.5)
  21.  
  22. print(threading.active_count())

2.线程lock.py

  1. import threading
  2. import time
  3. def run(n):
  4. global num
  5. l.acquire()#获取锁
  6. num = num + 1
  7. time.sleep(1)
  8. l.release()#释放锁
  9. print(num)
  10. # print("thread",n)
  11. def run2():
  12. count = 0
  13. while num < 9:
  14. print('---', count)
  15. count +=1
  16.  
  17. l = threading.Lock() #定义锁
  18.  
  19. num = 0
  20. t_list = []
  21. for i in range(10):
  22. t = threading.Thread(target=run, args=(i,))
  23. t.start()
  24. t_list.append(t)
  25. t2 = threading.Thread(target=run2)
  26. t2.start()
  27.  
  28. for t in t_list:
  29. t.join()
  30.  
  31. print('----main Thread----')
  32. print(num)

3.线程等待

  1. import threading
  2. import time
  3. def run(n):
  4. time.sleep(1)
  5. print("thread",n)
  6.  
  7. t_list = []
  8.  
  9. for i in range(10):
  10. t = threading.Thread(target=run, args=(i,))
  11. t.start()
  12. t_list.append(t)
  13. # t.join()
  14. for t in t_list:
  15. t.join()
  16.  
  17. print('----main Thread----')
  1.  
  2. 生产者消费者的两个主要作用
    1.程序的解耦合,异步
    2.提高了程序的运行效率
  1. import threading
  2. import queue
  3. import time
  4. def consumer(name):
  5.  
  6. while True:
  7. print("%s 取到骨头[%s]吃了" %(name,q.get()))
  8. time.sleep(0.5)
  9. q.task_done()
  10. def producer(name):
  11. count = 0
  12. # while q.qsize() < 5:
  13. for i in range(10):
  14. print("%s生成了骨头"%name,count)
  15. q.put(count)
  16. count +=1
  17. time.sleep(0.3)
  18. q.join()
  19. print("------chiwan--------")
  20. q = queue.Queue(maxsize = 4)
  21.  
  22. p = threading.Thread(target=producer,args=('alex',))
  23. # p2 = threading.Thread(target=producer,args=('aaa',))
  24. c = threading.Thread(target=consumer,args=('qqq',))
  25. p.start()
  26. # p2.start()
  27. 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. iOS架构师之路:慎用继承

    最近在看大神Casa的文章<跳出面向对象思想(一) 继承>,脑洞大开.文章给我们展示了一个随着产品需求不断变化的例子,该例子中通过继承实现不同页面的搜索视图和搜索逻辑的代码复用,随着产品需 ...

  2. cookie 保存上次访问url方法

    if (Session[Enums.UserInfoSeesion] == null) { HttpCookie cookie = Request.Cookies[Enums.UserLastAcce ...

  3. SQL高级查询——50句查询(含答案) ---参考别人的,感觉很好就记录下来留着自己看。

    --一个题目涉及到的50个Sql语句 --(下面表的结构以给出,自己在数据库中建立表.并且添加相应的数据,数据要全面些. 其中Student表中,SId为学生的ID) ---------------- ...

  4. Request.ServerVariables 获取服务器或者客户端信息

    本机ip[客户端]:request.servervariables("remote_addr") 从哪个页面转到当前页面的:Request.ServerVariables(&quo ...

  5. jdk安装及环境变量配置

    JDK是 Java 语言的软件开发工具包,主要用于移动设备.嵌入式设备上的java应用程序.JDK是整个java开发的核心,它包含了JAVA的运行环境,JAVA工具和JAVA基础的类库. jdk下载地 ...

  6. 亲身试用python简单小爬虫

    前几天基友分享了一个贴吧网页,有很多漂亮的图片,想到前段时间学习的python简单爬虫,刚好可以实践一下. 以下是网上很容易搜到的一种方法: #coding=utf-8 import urllib i ...

  7. UE4蓝图编程的第一步

    认识UE4蓝图中颜色与变量类型: UE4中各个颜色对应着不同的变量,连接点和连线的颜色都在表示此处是什么类型的变量.对于初学者来说一开始看到那么多连接点, 可能会很茫然,搞不清还怎么连,如果知道了颜色 ...

  8. Java里面,反射父类里面数字类型字段,怎么set值

    Java里面,反射父类里面数字类型字段,怎么set值,我的做法是这样: /** * TODO 直接设置对象属性值, 忽略private/protected 修饰符, 也不经过setter * @aut ...

  9. navicat在ubuntu下中文乱码的真正解决方法ZT

    乱码解决方法(自己解决我自己这种情况之后打猜测): 打开start_navicat文件,会看到 export LANG="en_US.UTF-8" 将这句话改为 export LA ...

  10. 2014 项目中用到batik

    现在手头上的项目用到batik编程,用的maven管理jar包,要在pom.xml中dependencies标签下添加一下配置(batik编程使用的顶层jar包) <dependency> ...