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