专栏首页python3多任务中进程、线程、协程

多任务中进程、线程、协程

为什么使用多任务?有什么好处?

答:提高程序执行效率,实现同一时刻可以做二个以上的事情。

啦啦啦。。。重点来了

并行:任务数大于CPU核数,每个CPU就要执行多个任务,那肯定忙不过来,多个任务执行就需要排队等待上一任务执行完,才能执行下一任务。

并发:任务数小于或等于CPU核数,每个CPU就只需只需一个任务(小于时,有的CPU不执行任务)。

1,线程:CPU调度的最小单位。我的理解是CPU执行代码的那一条线索。

      创建线程:

 1 import threading
 2 
 3 
 4 def f1():
 5     for i in range(100):
 6         print('线程1:{}'.format(i))
 7 
 8 
 9 def f2():
10     for i in range(100):
11         print('线程2:{}'.format(i))
12 
13 
14 if __name__ == '__main__':
15     t1 = threading.Thread(target=f1)
16     t2 = threading.Thread(target=f2)
17     t1.start()
18     t2.start()
上述结果:线程是相互竞争资源的。

2,进程:CPU分配资源的最小单位,我的理解是程序运行起来,代码+运行用到的资源为进程。进程有三个状态:就绪态(满足一切条件等待CPU执行),等待态(阻塞等待如:input(),accept(),yield等),执行态(CPU正在执行其功能)

    创建进程:

 1 from multiprocessing import Process
 2 
 3 
 4 def f1(msg):
 5     for i in range(100):
 6         print(msg + ':{}'.format(i))
 7 
 8 
 9 def f2(msg):
10     for i in range(100):
11         print(msg + ':{}'.format(i))
12 
13 
14 if __name__ == '__main__':
15     p1 = Process(target=f1, args=('线程1',))
16     p2 = Process(target=f2, args=('线程2',))
17     p1.start()
18     p2.start()

3,协程:协程是python个中另外一种实现多任务的方式,只不过比线程更小占用更小执行单元(理解为需要的资源)。

    创建协程:

 1 import time
 2 
 3 
 4 def fn1():
 5     while True:
 6         print("----任务1-----")
 7         yield
 8         time.sleep(1)
 9 
10 
11 def fn2():
12     while True:
13         print("----任务2-----")
14         yield
15 
16 
17 def main():
18     work1 = fn1()
19     work2 = fn2()
20 
21     while True:
22         next(work1)
23         next(work2)
24 
25 
26 if __name__ == "__main__":
27     main()

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python学习:作用域

    变量名引用分为三个作用域进行查找:首先是本地,之后是函数内(如果有的话),之后全局,最后是内置。L->E->G->B

    py3study
  • Python动态参数/命名空间/函数嵌套

      def func(*args, **kwargs):     pass

    py3study
  • python2和3的区别丶网络编程以及s

    py3study
  • 线程,进程和协程

    上述代码创建了10个“前台”,线程,然后控制器交给你了CPU,CPU根据指定算法进行调度,分片执行指令。

    Wyc
  • 『互联网架构』软件架构-分布式系列并发编程Lock锁和Tools限制(30)

    对象锁也叫方法锁,是针对一个对象实例的,它只在该对象的某个内存位置声明一个标识该对象是否拥有锁,所有它只会锁住当前的对象,而并不会对其他对象实例的锁产生任何影响...

    IT故事会
  • python2和3的区别丶网络编程以及s

    py3study
  • Event事件、进程池与线程池、协程

    可以为进程池或线程池内的每个进程或线程绑定一个函数,该函数在进程或线程的任务执行完毕后自动触发,并接收任务的返回值当作参数,该函数称为回调函数。

    GH
  • 陷阱!python参数默认值

    在stackoverflow上看到这样一个程序: class demo_list: def __init__(self, l=[]): ...

    CDA数据分析师
  • JVM性能调优-实战应⽤之使⽤虚拟机⼯具JSTACK

    cwl_java
  • java并发编程(4)--线程池的使用

    转载:http://www.cnblogs.com/dolphin0520/p/3932921.html 一. java中的ThreadPoolExecutor...

    Ryan-Miao

扫码关注云+社区

领取腾讯云代金券