【发布时间】:2021-09-02 17:10:33
【问题描述】:
我的目标是生成新进程,在后台运行并将mmap 对象作为参数传递给那里。玩具示例:
from multiprocessing import Process
import mmap
import time
def modify(buf):
time.sleep(10)
buf[0:100] = b"xy" * 50
def main_job(t):
time.sleep(t)
if __name__ == "__main__":
BUF = mmap.mmap(-1, length=100, access=mmap.ACCESS_WRITE)
BUF[0:100] = b"a" * 100
p = Process(target=modify, args=(BUF,))
p.daemon=True
p.start() #background job started
main_job(100) #man job started in parallel
print(BUF[0:100])
TypeError: cannot pickle 'mmap.mmap' object
这里我有主要工作,它只是睡觉,我想用后台工作产生进程并将 mmap obj 作为参数传递给子进程。
问题是 mmap 对象不可拾取,并且无法同时使用 mmap 和多处理。
但我不知道如何创建后台作业,例如,我可以通过os.fork() 传递函数和参数。
如何解决这个问题?
【问题讨论】:
标签: python multiprocessing python-multiprocessing shared-memory mmap