Python多进程库multiprocessing的封装

最近项目上有需要,大概就是有一个list里的东西需要处理,例如一堆文件什么的,于是有一个file_processor——按顺序处理一个文件列表。简单封装了一下multiprocessing这个库,发现用起来很方便,很轻松地就实现了多进程并行处理(进程间无交互):

import multiprocessslices = multiprocess.split_list(filelist, 8) #分成8份processes = map(lambda slice: multiprocess.spawn(file_processor, slice), slices)sys.exit(multiprocess.start_and_join(processes))multiprocess.py 则是这样的:

#!/usr/bin/python#coding: utf-8import sysfrom multiprocessing import Processdef split_list(data, n_slice, hash_func=lambda i, d: i): #default: sequential slices = [] for i in range(n_slice): slices.append([]) for i, d in enumerate(data): slices[hash_func(i, d) % n_slice].append(d) return slicesdef spawn(target, *args, **kwargs): return Process(target=target, args=args, kwargs=kwargs)def start_and_join(processes, killall_if_fail=True): for p in processes: p.start() exitcode = 0 for p in processes: p.join() if p.exitcode != 0: exitcode = p.exitcode break if exitcode != 0: for p in processes: if killall_if_fail and p.is_alive(): p.terminate() return exitcode

Python多进程库multiprocessing的封装

相关文章:

你感兴趣的文章:

标签云: