我有一个启动多个进程的 python 程序。而这些进程又会产生它们自己的子进程(嵌套进程)。我喜欢保留由主进程或任何子进程启动的所有进程的列表,但无法弄清楚如何将嵌套进程的句柄返回给主进程。这是我尝试过的,但编译器说进程句柄不可选择。
import time
import sys
import os
import multiprocessing
import subprocess
def thread2(ns):
loopcnt = 0
extCmd = os.path.join("/bin/sleep 20")
nestedprocess = subprocess.Popen(extCmd.split(' '))
if nestedprocess.poll() is None: # check if process has started.
print("{} cmd started.".format(extCmd))
ns.nestedprocess = nestedprocess # <=== TypeError: can't pickle _thread.lock objects
else:
print("Error: {} failed to start.".format(extCmd))
while loopcnt < 5:
loopcnt += 1
print("Thread running: {}".format(loopcnt))
ns.data += loopcnt
time.sleep(0.1)
print("Thread2 done.")
return
if __name__ == "__main__":
namespace = multiprocessing.Manager().Namespace()
namespace.data = 10 # int is pickable so there are no problems.
namespace.nestedprocess = None
process2 = multiprocessing.Process(target=thread2, args=(namespace, ))
process2.start()
process2.join()
print("Data: {}.".format(namespace.data))
print("process: {}.".format(namespace.nestedprocess))
sys.exit(0)