线程/进程/协程知识学习

关于线程/进程/协程学习理解:
1.线程:最小的程序可执行单位
2.进程:正在执行程序的一个实例,包含当前正在执行的程序代码,至少包含一个线程。因此进程是线程的集合。
3.协程:属于一种计算机组件,普遍理解为一种非抢占式的多任务子程序,允许在某个位置进行暂停跳出或再次返回某个位置。通常就利用协程在遇到IO阻塞状态时让其自行切换至其他可执行状态的特点,从而实现高并发。

进程创建:

  1. 导入multiprocessing模块
  2. 定义一个run函数供进程调用
  3. 创建进程对象p,通过for循环创建10个进程,target指向run函数地址,args导入函数参数
  4. 启动start()
  5. 等待结果返回join()

    import multiprocessing
    def run(name):
            print('hello',name)
    
    if __name__ == '__main__':
            for i in range(10):
                    p = multiprocessing.Process(target=run,args=('jim %s' %i,))
                    p.start()
                    p.join()

线程创建:

  1. 导入threading模块
  2. 定义一个run函数
  3. 创建一个线程对象t,target指向run函数地址,args导入函数参数
  4. 启动start()
  5. 等待结果返回join()

    import threading
    def run(n)
        print(‘n’)
    t1 = threading.Thread(target=run,args=('t1',))
    t1.start()
    t1.join()

协程创建:

  1. 导入gevent模块
  2. 定义执行函数:home(),bbs(),blog()
  3. 调用函数gevent.spawn(home,'jim'),(home,'jim')其中函数名home在首位,'jim'为参数

    import gevent
    import time

    start_time = time.time()

    def home(name):
    print('home page',name)
    gevent.sleep(3)

    def bbs():
    print('bbs page')
    gevent.sleep(4)

    def blog():
    print('blog page')
    gevent.sleep(2)

    gevent.joinall([
    gevent.spawn(home,'jim'),
    gevent.spawn(bbs),
    gevent.spawn(blog),
    ])

    print('Cost time::', time.time() - start_time)

转载于:https://blog.51cto.com/szcat/2056172

你可能感兴趣的:(python)