Python编程——多进程与多线程编程(附实例)

进程与线程的概念进程,是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竟争计算机系统资源的基本单位。每一个进程都有一个自己的地址空间,即进程空间或(虚空间)。进程空间的大小只与处理机的位数有关,一个 16 位长处理机的进程空间大小为216 ,而 32 位处理机的进程空间大小为 232 。进程至少有 5 种基本状态,它们是:初始态,执行态,等待状态,就绪状态,终止状态。...
摘要由CSDN通过智能技术生成

进程与线程的概念

进程,是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竟争计算机系统资源的基本单位。每一个进程都有一个自己的地址空间,即进程空间或(虚空间)。进程空间的大小只与处理机的位数有关,一个 16 位长处理机的进程空间大小为216 ,而 32 位处理机的进程空间大小为 232 。进程至少有 5 种基本状态,它们是:初始态,执行态,等待状态,就绪状态,终止状态。

线程,在网络或多用户环境下,一个服务器通常需要接收大量且不确定数量用户的并发请求,为每一个请求都创建一个进程显然是行不通的,无论是从系统资源开销方面或是响应用户请求的效率方面来看。因此,操作系统中线程的概念便被引进了。线程,是进程的一部分,一个没有线程的进程可以被看作是单线程的。线程有时又被称为轻权进程或轻量级进程,也是 CPU 调度的一个基本单位。

进程拥有一个完整的虚拟地址空间,不依赖于线程而独立存在;反之,线程是进程的一部分,没有自己的地址空间,与进程内的其他线程一起共享分配给该进程的所有资源

1. 多进程(multiprocessing

由于Python是跨平台的,自然也提供了一个跨平台的多进程支持。multiprocessing模块就是跨平台版本的多进程模块

(1)Process类:

multiprocessing模块提供了一个Process类来代表一个进程对象:Process ( target  , args ),target表示调用对象,args表示调用对象的位置参数元组。

示例1:创建函数并将其作为单个进程,启动这个子进程并等待其结束;

from  multiprocessing import Process
import os

def worker(name):
    print("子进程是 %s:%s"%(name,os.getpid()))

if __name__ == "__main__":
    print("父进程:%s" %os.getpid())
    #target表示调用对象,args表示调用对象的位置参数元组。
    p = Process(target = worker, args = ('p1',))
    #启动子进程
    p.start()
    #等待子进程结束后在继续往下运行,通常用于进程间的同步
    p.join()
    print('子进程运行结束!')

运行结果:
父进程:948
子进程是 p1:2928
子进程运行结束!

如果没有p.join(),主程序就不会等待子进程运行结束在往下执行,而是会直接运行下面的内容。

from  multiprocessing import Process
import os

def worker(name):
    print("子进程是 %s:%s"%(name,os.getpid()))

if __name__ == "__main__":
    print("父进程:%s" %os.getpid())
    #target表示调用对象,args表示调用对象的位置参数元组。
    p = Process(target = worker, args = ('p1',))
    #启动子进程
    p.start()
    print('子进
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值