zoukankan      html  css  js  c++  java
  • python3 进程线程协程 并发查找列表

    code

    import multiprocessing
    from multiprocessing import Pool,Queue
    import time
    import threading
    import gevent
    from gevent import monkey    
    monkey.patch_all()   #gevent三行放在其他所有import语句之前可以避免出现警告或者报错信息,导致程序不能正常运行
    
    def process_data(data,que,index):
    
        for i in data:
            if(i==8900):
                que.put(i)
        pass
            
    def get_in_gevent(data,que,index):
    
        searchl=data
        gevent_pool=[]
        pro_num=10
    
        #每个进程处理任务数量
        per_num=int(len(searchl)/pro_num)
    
        #余数
        lef=len(searchl)%pro_num
    
        for i in range(pro_num):
            if(i==(pro_num-1) and (not lef==0)):
                tmp = gevent.spawn(process_data,searchl[per_num*i:per_num*(i+1)+lef],que,i)
            else:
                tmp=gevent.spawn(process_data,searchl[per_num*i:per_num*(i+1)],que,i)
            tmp.name = "gevent{}".format(i)
            gevent_pool.append(tmp)
            tmp.start()
    
        for j in gevent_pool:
            j.join()
    
    
    def get_in_thread(data,que,index):
    
        searchl=data
        thread_pool=[]
        pro_num=10
    
        #每个进程处理任务数量
        per_num=int(len(searchl)/pro_num)
    
        #余数
        lef=len(searchl)%pro_num
    
        for i in range(pro_num):
            if(i==(pro_num-1) and (not lef==0)):
                tmp=threading.Thread(target=get_in_gevent,args=(searchl[per_num*i:per_num*(i+1)+lef],que,i))
            else:
                tmp=threading.Thread(target=get_in_gevent,args=(searchl[per_num*i:per_num*(i+1)],que,i))
            tmp.name = "thread{}".format(i)
            tmp.daemon = True
            thread_pool.append(tmp)
            tmp.start()
    
        for j in thread_pool:
            j.join()
    
    
    
    
    if __name__ == '__main__':
    
        que=Queue()
        searchl=[ i for i in range(1000000) ]
        pro_pool=[]
        pro_num=12
    
        #每个进程处理任务数量
        per_num=int(len(searchl)/pro_num)
    
        #余数
        lef=len(searchl)%pro_num
    
        for i in range(pro_num):
            if(i==(pro_num-1) and (not lef==0)):
                tmp = multiprocessing.Process(target=get_in_thread,args=(searchl[per_num*i:per_num*(i+1)+lef],que,i))
            else:
                tmp = multiprocessing.Process(target=get_in_thread,args=(searchl[per_num*i:per_num*(i+1)],que,i))
            tmp.name = "progress{}".format(i)
            tmp.daemon = True
            pro_pool.append(tmp)
            tmp.start()
    
        while(True):
            v=que.get()
            if(v):
                print("find",v)
                break
    
        print("main")

    输出

    macname@MacdeMBP Desktop % python3 test.py
    find 8900
    main
    macname@MacdeMBP Desktop % 

  • 相关阅读:
    Java Volatile keyword
    解决 The 'InnoDB' feature is disabled; you need MySQL built with 'InnoDB' to have it working
    【玩转cocos2d-x之三十九】Cocos2d-x 3.0截屏功能集成
    【DP】UVA 624 CD 记录路径
    ns3加入模块之vanet-highway
    awk向脚本传递參数(二)
    【传递正能量】献给默默追梦的人
    算法(第四版)学习笔记之java实现可以动态调整数组大小的栈
    Webstorm/IntelliJ Idea 过期破解方法
    CenterOS下安装NodeJS
  • 原文地址:https://www.cnblogs.com/sea-stream/p/14057824.html
Copyright © 2011-2022 走看看