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 % 

  • 相关阅读:
    SSIS Error:Package Validation Error. SSIS Error Code DTS_E_OLEDBERROR. .Error code: 0x80040E37. An OLE DB record is available. Hresult: 0x80040E37
    MDS
    oracle11g rac静默安装+racADG部署搭建
    oracle 19c 单机ADG部署
    对索引组织表以及簇表的一些理解
    对表的连接的总结
    全局临时表
    对分区表的一些总结
    对临时表空间的一些常用查询
    linux 常用命令总结
  • 原文地址:https://www.cnblogs.com/sea-stream/p/14057824.html
Copyright © 2011-2022 走看看