zoukankan      html  css  js  c++  java
  • 多进程

    1.1个进程实例:

    import multiprocessing
    import time
    
    def run(name):
        time.sleep(1)
        print('hello', name)
    
    if __name__ == '__main__':
        p = multiprocessing.Process(target=run, args=('bob',))
        p.start()
        p.join()
    

     运行结果:

    hello bob
    

    2. 同时启用3个进程:

    import multiprocessing
    import time
    
    def run(name):
        time.sleep(1)
        print('hello', name)
    
    if __name__ == '__main__':
        for i in range(3):
            p = multiprocessing.Process(target=run, args=('bob %s'%i,))
            p.start()
    
    

     运行结果:

    hello bob 0 
    hello bob 1
    hello bob 2
    
    

    3.进程里面可以再起新的线程:

    import multiprocessing
    import time,threading
    
    def thread_run():
        print(threading.get_ident()) #获得线程号
    def run(name):
        time.sleep(1)
        print('hello', name)
        t=threading.Thread(target=thread_run,)
        t.start()
    
    if __name__ == '__main__':
        for i in range(3):
            p = multiprocessing.Process(target=run, args=('bob %s'%i,))
            p.start()
            p.join()
    

     运行结果:

    hello bob 0
    12108
    hello bob 1
    8552
    hello bob 2
    9080
    

     4.取进程号。没有起多进程,却出现了2个进程号。再执行一遍,发现父进程号不变,子进程号在发生变化。 

    from multiprocessing import Process
    import os
    
    
    def info(title):
        print(title)
        print('module name:', __name__)
        print('parent process:', os.getppid()) #父进程的ID
        print('process id:', os.getpid())  #自己的ID
        print("
    
    ")
    
    
    def f(name):
        info('33[31;1mfunction f33[0m')
        print('hello', name)
    
    
    if __name__ == '__main__':
        info('33[32;1mmain process line33[0m')
    

     运行结果:

    main process line
    module name: __main__
    parent process: 8748
    process id: 11976
    

     每一个进程默认都是由父进程启动的。11976这个进程是由pyCharm 8748启用的。

    5. 父进程和子进程里面都调用f

    from multiprocessing import Process
    import os
    
    
    def info(title):
        print(title)
        print('module name:', __name__)
        print('parent process:', os.getppid()) #父进程的ID
        print('process id:', os.getpid())  #自己的ID
        print("
    
    ")
    
    
    def f(name):
        info('33[31;1mcalled from child process function f33[0m') #子进程里也调用f
        print('hello', name)
    
    
    if __name__ == '__main__':
        info('33[32;1mmain process line33[0m')
        p = Process(target=f, args=('bob',)) #父进程里调用f
        p.start()
        #p.join()
    

     运行结果:发现每一个子进程都是由父进程启动的。即便是主程序,也有一个父进程。

    main process line
    module name: __main__
    parent process: 8748
    process id: 5604
    
    
    
    called from child process function f
    module name: __mp_main__
    parent process: 5604
    process id: 11096
    
    
    
    hello bob
    
    Process finished with exit code 0
    
  • 相关阅读:
    #Eclipse web工程 部署 三种方式 3
    Eclipse web工程 部署 三种方式 2
    浅谈Eclipse调用Tomcat服务的原理
    Eclipse web工程 部署 三种方式 1
    java区分绝对路径和相对路径
    设置checkbox不能选中,复选框不能选中
    Java IO,io,文件操作,删除文件,删除文件夹,获取文件父级目录
    NFS,两台linux设置网络共享文件系统
    dom4j 改变XML声明和编码格式
    笔记本自带wifi
  • 原文地址:https://www.cnblogs.com/momo8238/p/7356245.html
Copyright © 2011-2022 走看看