python多进程库_Python多进程库multiprocessing的封装

本文介绍了如何使用Python的multiprocessing库封装一个简单的多进程处理文件列表的工具。通过split_list函数将文件列表分片,并利用spawn方法启动多个进程进行并行处理,实现进程间无交互的高效执行。
摘要由CSDN通过智能技术生成

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

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

import multiprocess

slices = 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-8

import sys

from multiprocessing import Process

def 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 slices

def 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值