7.3.2

# 1、开进程的开销远大于开线程
# 2、同一进程内的多个线程共享该进程的地址空间
# 3、查看pid
1.开进程的开销远大于开线程 看以下实例
import time
from threading import Thread
from multiprocessing import Process

def running(name):
    print('%s running' %name)
    time.sleep(2)
    print('%s running end' %name)

if __name__ == '__main__':
    p1=Process(target=running,args=('cmz',))
    p1.start()

    # t1=Thread(target=running,args=('cmz',))
    # t1.start()
    print('主线程')
主线程
cmz running
cmz running end
运行结果

可以见在打印主线程代最后一行代码的时候,进程还没执行,p1.start ()将开启进程的信号发给操作系统后,操作系统要申请内存空间,让好拷贝父进程地址空间到子进程,开销远大于线程

import time
from threading import Thread
from multiprocessing import Process

def running(name):
    print('%s running' %name)
    time.sleep(2)
    print('%s running end' %name)

if __name__ == '__main__':
    # p1=Process(target=running,args=('cmz',))
    # p1.start()

    t1=Thread(target=running,args=('cmz',))
    t1.start()
    print('主线程')
cmz running
主线程
cmz running end
运行结果

线程启动后直接打印,因为没有资源的申请。所以比进程要快。

# 2、同一进程内的多个线程共享该进程的地址空间
from threading import Thread
from multiprocessing import Process

n=100
def task():
    global n
    n=0

if __name__ == '__main__':
    p1=Process(target=task,)
    p1.start()
    p1.join()

    # t1=Thread(target=task,)
    # t1.start()
    # t1.join()

    print('主线程',n)
主线程 100
运行结果

因为是进程之间是隔离的。所以是隔离的,子进程肯定也改了自己空间的n的值

from threading import Thread
from multiprocessing import Process

n=100
def task():
    global n
    n=0

if __name__ == '__main__':
    # p1=Process(target=task,)
    # p1.start()
    # p1.join()

    t1=Thread(target=task,)
    t1.start()
    t1.join()

    print('主线程',n)
主线程 0
运行结果

因为同一个进程下的多个线程是共享数据的。


# 3、查看pid
from threading import Thread
from multiprocessing import Process,current_process
import os

def task():
    # print(current_process().pid)
    print('子进程PID:%s  父进程的PID:%s' %(os.getpid(),os.getppid()))

if __name__ == '__main__':
    p1=Process(target=task,)
    p1.start()

    print('主线程',current_process().pid)
    print('主线程',os.getpid())
主线程 4988
主线程 4988
子进程PID:7608  父进程的PID:4988
运行结果
from threading import Thread
import os

def task():
    print('子线程:%s' %(os.getpid()))

if __name__ == '__main__':
    t1=Thread(target=task,)
    t1.start()

    print('主线程',os.getpid())
子线程:948
主线程 948
运行结果

 子线程和主线程同属于一个主进程,



原文地址:https://www.cnblogs.com/caimengzhi/p/8516634.html