python的线程无法很好的利用到多cpu的功能,所以大家都比较推荐多进程
下面是进程池的用法,我这里是清洗redis的过期内容
close和join一定要做,否则会占用内存
import multiprocessing def process_redis(time_range): pass # 这里不详细写了 def clear_timeout_redis(): while 1: try: p_pool = multiprocessing.Pool(processes=6) # processes 默认是cpu个数 addTime = time.time() hash_field = addTime // 60 * 60 - 660 ikeys = r.keys("instance_*") # r是redis的pool for ikey in ikeys: time_range = ikey.split("_")[1] if int(time_range) < hash_field: p_pool.apply_async(process_redis, (time_range, )) # 这里是异步任务和普通起进程用法一样 except: logging.error(traceback.format_exc()) p_pool.close() p_pool.join() # 记得要close(),join() time.sleep(0)
时间: 2024-10-12 03:22:47