写在前面将列表分割供多进程、多线程使用
def list_fund(listTemp, n): """ 将列表平均分成N块 :param listTemp: :param n: :return: """ resules = [] for i in range(0, len(listTemp), n): temp = listTemp[i:i + n] resules.append(temp) return resules
线程池的使用
import time import threadpool def sayhello(str): print("Hello ", str) time.sleep(2) name_list = ['xiaozi', 'aa', 'bb', 'cc'] start_time = time.time() pool = threadpool.ThreadPool(4) requests = threadpool.makeRequests(sayhello, name_list) [pool.putRequest(req) for req in requests] pool.wait() print('%d second' % (time.time() - start_time))
多进程的使用
num = 5 p = Pool(num - 1) for i in range(num): p.apply_async(threading_push, args=(part_data_list[i],)) p.close() p.join() logger.info("多进程 线程推送成功1 用时:{}".format(round(time.time() - start_time, 4)))
进程池的使用
p = Pool(4) # 创建一个包含5个进程的进程池 print("tuisongshuju:{}".format(pool_data_list)) for i in pool_data_list: p.apply_async(func=threading_push, args=(i,)) p.close() # 等子进程执行完毕后关闭进程池 # time.sleep(2) # p.terminate() # 立刻关闭进程池 p.join()
协程池
import gevent import gevent.pool import gevent.monkey gevent.monkey.patch_all()#分布式冲突 def run_task(data): print(data)
if __name__=="__main__": mypool=gevent.pool.Pool(2) datalist=[x for x in range(10)] result=mypool.map(run_task,datalist) print(result)