• 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 % 

  • 相关阅读:
    codevs 4511 信息传递(NOIP2015 day1 T2)
    caption标签,为表格添加标题和摘要
    用css样式,为表格加入边框
    table标签,认识网页上的表格
    认识div在排版中的作用
    使用ol,添加图书销售排行榜
    使用ul添加列表
    使用<pre>标签为你的网页加入大段代码
    想加入一行代码吗?使用<code>标签
    <address>标签,为网页加入地址信息
  • 原文地址:https://www.cnblogs.com/sea-stream/p/14057824.html
Copyright © 2020-2023  润新知