【问题标题】:Create two child process using python(windows)使用python(windows)创建两个子进程
【发布时间】:2017-04-03 02:07:44
【问题描述】:

使用 Python 编程语言完成以下任务:

创建两个进程(我们称它们为 P1 和 P2)。 P1 应该打印“I am P1”,P2 应该打印“I am P2”。主进程(创建 P1 和 P2 的进程)应该等待它们。那么,P1和P2都做完后,主进程应该打印“我是主进程,两个进程都做完了”。

【问题讨论】:

  • 你试过什么?这看起来像家庭作业。请阅读以下stackoverflow.com/help/how-to-ask
  • 你必须展示你的尝试。 Stackoverflow 是一个编程社区,而不是一个家庭作业社区。无论如何,我在下面写了一个答案来帮助你

标签: python windows process


【解决方案1】:

在windows中,我们没有fork系统调用,所以我们可以使用一个叫做multiprocessing的python模块:-

from multiprocessing import Process, Lock
import time
import os
def f(lock,id,sleepTime):
    lock.acquire()
    print "I'm P"+str(id)+" Process ID: "+str(os.getpid())
    lock.release()
    time.sleep(sleepTime)   #sleeps for some time

if __name__ == '__main__':
    print "Main Process ID: "+str(os.getpid())
    lock=Lock()
    p1=Process(target=f, args=(lock,1,3,))   #P1 sleeps for 3 seconds
    p2=Process(target=f, args=(lock,2,5,))   #P2 sleeps for 5 seconds
    start=time.time()
    p1.start()
    p2.start()
    p1.join()
    p2.join()
    end=time.time()
    print "I am the main process, the two processes are done"
    print "Time taken:- "+str(end-start)+"secs"   #MainProcess terminates at approx ~ 5 secs.

在任务管理器中捕获的进程:- 代码输出是:-

Main Process ID: 9804
I'm P1 Process ID: 6088
I'm P2 Process ID: 4656                                                          
I am the main process, the two processes are done
Time taken:- 5.15300011635secs

希望有帮助!!

【讨论】:

    【解决方案2】:

    我没有首先注意到 Windows 标记。所以我按照UNIX写的。我保留了答案而不是删除,希望它也能帮助 UNIX 用户。演示相同的正确代码是:-

    import os
    import time
    
    def child(id, sleepTime):
        print "I'm P"+str(id)
        time.sleep(sleepTime)
        os._exit(0)
    p1=os.fork()
    if (p1==0):
        child(1,3)    #P1 sleeps for 3 seconds
    p2=os.fork()
    if (p2==0):
        child(2,5)   #P2 sleeps for 5 seconds
    if (p1>0 and p2>0):
        os.waitpid(p1,0)   #Waiting for child 1
        os.waitpid(p2,0) #Waiting for child2
        print "I am the main process, the two processes are done"   #Printed after approx 5 seconds
    

    我执行了

    time python fork.py
    

    输出如预期:-

    I'm P1
    I'm P2
    I am the main process, the two processes are done
    
    real    0m5.020s
    user    0m0.004s
    sys 0m0.008s
    

    【讨论】:

    • 您没有看到这个问题上的 Windows 标签吗?使用子流程模块。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-03
    • 2017-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-30
    相关资源
    最近更新 更多