美文网首页
分享-python多任务

分享-python多任务

作者: 终生学习wq | 来源:发表于2019-11-14 23:00 被阅读0次

    多任务的实现

    多任务处理,同一时刻进行多次代码实现。

    任务1执行0.01秒,切换到任务2,任务2执行0.01秒,再切换到任务3,执行0.01秒……这样反复执行下去。表面上看,每个任务都是交替执行的,但是,由于CPU的执行速度实在是太快了,我们感觉就像所有任务都在同时执行一样。

    进程

    进程是资源(CPU、内存等)分配的最小单位,进程有独立的地址空间与系统资源,一个进程可以包含一个或多个线程。

    创建进程特别多的时候,通过进程池进行管理。

    from multiprocessing import Pool 
    
    import os,time,random 
    
    def worker(msg): 
      t_start = time.time() 
      print("%s开始执行,进程号为%d"%(msg,os.getpid())) 
      random.random()随机生成0~1之间的浮点数 
      time.sleep(random.random()*2) 
      t_stop = time.time() 
      print(msg,"执行完毕,耗时%0.2f"%(t_stop-t_start)) 
        po=Pool(3) #定义一个进程池,最大进程数3for i in range(0,10): 
      Pool.apply_async(要调用的目标,(传递给目标的参数元祖,)) 
      #每次循环将会用空闲出来的子进程去调用目标 
      po.apply_async(worker,(i,)) 
        print("----start----") 
        po.close() #关闭进程池,关闭后po不再接收新的请求 
        po.join() #等待po中所有子进程执行完成,必须放在close语句之后 
        print("-----end-----") 
    

    线程

    线程是CPU调度的最小单位,是进程的一个执行流,线程依赖于进程而存在,线程共享所在进程的地址空间和系统资源,每个线程有自己的堆栈和局部变量

    协程

    单线程执行多任务

    <?php
    
    function request(){ 
      while (true){ 
            echo "将要进行远程数据的请求".PHP_EOL; 
            yield;  // 让出cpu资源 
            sleep(5); 
            echo "远程请求结束".PHP_EOL; 
      } 
    } 
    
    function test($request){ 
      while (true){ 
        echo "test 开始".PHP_EOL; 
        $request->next(); 
        sleep(0.5); 
      } 
    } 
    
    $a = request(); 
    
    test($a); 
    

    相关文章

      网友评论

          本文标题:分享-python多任务

          本文链接:https://www.haomeiwen.com/subject/yzgdictx.html