多进程之间如何共享大体积变量?
我有一个python搜索任务,进程开启的时候需要先从硬盘里读取一个100MB的文件,然后开启socket监听请求,然后内存中搜索,然后结果给客户端。
然后一个进程太慢了,我想并发处理,因为python的多线程没有办法利用多核,所以我想用多进程,但是多进程的话,如果我开10个进程,那就需要100MBx10=1GB的内存空间了,但是100MB的内容其实都是静态的,我不需要他们变动,这样存10份相同内容在内存中,感觉太浪费空间了。(而且这个文件以后可能会变得很大)。
所以我该怎么办,既提高并发处理,有节约内存呢?
我本来想把这个数据方redis,但是从数据结构上redis很难支持?
我该怎么办呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
需求上看你要多进程搜的话,那个数据文件能分片是最好的。
像是ES,每个节点(进程)搜自己的分片(Map),返回给收到请求的节点,收到请求的节点去整合分片(Reduce),最后返回结果。
单纯针对分享内存的场景的话当然是 shm,用 python3.8+ 自带了:multiprocessing.shared_memory,看文档学着用就完了。
其他版本的 python 去 pypi 上找找共享内存的包就行。
新版本的python有个 multiprocessing.shared_memory 你可以试试, 我没详细试过, 但是这个确实可以, 主要的问题和redis一样, 要看你的原数据格式, 看看支不支持, 怎么转换