1

我有一个启动多个进程的 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)
4

0 回答 0