进程,线程,协程

三者同样是为了提高执行的效率,利用等待的时间执行更多的操作

1.线程 import threading

建立一个执行的对象

td1 = threading.Thread(target=saySorry,args=(g_nums,),name='小明')  #target需要传的就是要执行的那个函数,args用来传参数但记住一定是个元组,name是给这个线程命名,可以不写,系统会自动生成一个名字 threading.current_thread().name方法可以查看当前线程名称

    td1.start() #启动线程,即让线程开始执行

    td1.join()#这个方法可以是指定的线程等待,即主线程等待子线程执行完成,在开始执行

    线程是可以共享全局变量的,但是为了防止数据紊乱,通常会使用lock锁,但是一定要注意死锁,即线程之间相互等待的问题

            # 创建锁

            mutex = threading.Lock()

           # 锁定

           mutex.acquire()

           # 释放

             mutex.release()

2.进程 一个程序运行起来后,代码+用到的资源 称之为进程,它是操作系统分配资源的基本单元。

不仅可以通过线程完成多任务,进程也是可以的

进程状态:

       就绪态:运行的条件都已经慢去,正在等在cpu执行

       执行态:cpu正在执行其功能

       等待态:等待某些条件满足,例如一个程序sleep了,此时就处于等待态

   from multiprocessing import Process

   创建子进程时,只需要传入一个执行函数和函数的参数,创建一个Process实例,用start()方法启动

    p = Process(target=run_proc)

    p.start()

   这是其他的一些参数:

        target:如果传递了函数的引用,可以任务这个子进程就执行这里的代码

        args:给target指定的函数传递的参数,以元组的方式传递

        kwargs:给target指定的函数传递命名参数

        name:给进程设定一个名字,可以不设定

        group:指定进程组,大多数情况下用不到

      方法:

           start():启动子进程实例(创建子进程)

            is_alive():判断进程子进程是否还在活着

            join([timeout]):是否等待子进程执行结束,或等待多少秒

              terminate():不管任务是否完成,立即终止子进程   

     进程之间是不会共享全局变量的,及时在另一个进程之间改变了全局变量的值,在其他进程访问的时候这个值还是没有改变的

     但是有时候是互相需要通信该怎么办呢,需要用队列Queue

    # from multiprocessing import Queue

      方法

             Queue.qsize() 返回队列的大小

             Queue.empty() 如果队列为空,返回True,反之False

              Queue.full() 如果队列满了,返回True,反之False

              Queue.full 与 maxsize 大小对应

              Queue.get([block[, timeout]])获取队列,timeout等待时间

         import Queue

             myqueue = Queue.Queue(maxsize = 10)

              将一个值放入队列中

                myqueue.put(10)

                 将一个值从队列中取出

                 myqueue.get()

你可能感兴趣的:(进程,线程,协程)