多进程

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
原文地址:https://www.cnblogs.com/momo8238/p/7356245.html