我想在子流程中调用python函数,而不创建当前流程的副本。
我有一个方法B.run()
,应该多次调用A.run()
。
ProcessPoolExecutor
消耗大量内存,因此我不想使用subprocess.Popen
,因为它会复制整个内存AFAIK。
我也不想使用B.py
,因为它对我有几个缺点:
PYTHONPATH
的位置,而不是依赖B.run()
我也不想生成线程,因为Tuple
很容易崩溃,我不希望它影响父进程。
有没有一种我忽略的方法,它具有产生单独进程的优势,没有额外的内存,但有调用python方法的好处?
编辑1: 一些问题的答案:
答案 0 :(得分:0)
大多数Unix操作系统在分叉新进程时都在使用Copy-On-Write。
这意味着,如果进程子进程未更改内存,则内存不会重复,而是共享。
您看到进程具有相同的内存量,因为它们使用 量的虚拟内存,但是当涉及到物理内存时,父进程内存实际上是在所有人都分享了独特的副本。
如果我认为正确并且孩子们的过程根本没有触及父母的记忆,那么你只是在浪费时间去反对Unix设计原则。