python3 多进程求助 OSError: [Errno 24] Too many open files
业务:有大量(本次测试时 1
万多张)图片需要转成 base64
编码后,送入 http
接口请求处理,我采用以下代码: base64
用生成器处理, request
用多进程。 但下面代码跑到一半的时候,直接抛了 OSError: [Errno 24] Too many open files
, 百度了一下,看上去是进程超过所能开启的最大文件数了, ulimit -n # mac 8192
请教下各位,我怎么应该 fix
这个问题,最终需求就是想快速高效的完成这个操作,可能我写的代码一开始就有问题,还希望大佬们指点一下。
import json import time import requests import base64 import os from multiprocessing import Process def img_to_base64(img_path): r = {} for root, dirs, files in os.walk(img_path): for pic in files: if pic.endswith(('.png', '.jpg', '.jpeg', '.tiff', '.bmp', '.gif')): img = os.path.join(root, pic) with open(img, 'rb') as f: bs64 = base64.b64encode(f.read()).decode('utf-8') r[img] = bs64 yield r def req(host, img_path): bs64_generator = img_to_base64(img_path) procs = [] for items in bs64_generator: body, pic = None, None for pic, base64 in items.items(): body = { "requests": [ { "resource": { "base64": base64 } } ] } p = Process(target=r, args=(host, body, pic)) procs.append(p) p.start() for proc in procs: proc.join() def r(host, body, img): url = f'http://{host}/demo/' r = requests.post(url, data=json.dumps(body)) print(img, r.json().get('results')) ret = r.json().get('results')[0]['status'] if ret != 'OK': print(img, ret) req('10.10.23.17:3345', './mypic/')