python中进程、线程、协程详细介绍_简要说明__python3中的进程/线程/协程

多任务可以充分利用系统资源,极大提升程序运行效率,多任务的实现往往与 多线程,多进程,多协程有关

稳定性: 进程 > 线程 > 协程

系统资源占用量:进程 > 线程 > 协程

父子关系: 进程(父亲) > 线程(儿子) > 协程(孙子)

多任务可以充分利用系统资源,极大提升程序运行效率,多任务的实现往往与 多线程,多进程,多协程有关

稳定性: 进程 > 线程 > 协程

系统资源占用量:进程 > 线程 > 协程

父子关系: 进程(父亲) > 线程(儿子) > 协程(孙子)

使用3重嵌套创建2进程4线程8协程

import os

import time

from multiprocessing import Process

from threading import Thread

import gevent

from gevent import monkey

monkey.patch_all()

# 创建两个进程,每个线程两个线程,每个线程两个协程

def print_gevent_info(T_info ,G_info):

print("在协程执行的函数中,所属的进程号为%d,线程的名称为%s,协程的名称为%s"%(os.getpid(),T_info ,G_info))

time.sleep(0.5)

def print_thread_info(T_info):

print("在线程执行的函数中:线程所属的进程号为:%d,进程的名称为%s"%(os.getpid(),T_info))

gevent.joinall([gevent.spawn(print_gevent_info, T_info,"g1"), gevent.spawn(print_gevent_info, T_info, "g2")])

time.sleep(2)

def creat_two_thread():

t1 = Thread(target=print_thread_info, args=("t1",))

t2 = Thread(target=print_thread_info, args=("t2",))

t1.start()

t2.start()

def print_process_info(P_info):

# 创建线程

creat_two_thread()

print("在进程执行的函数中,进程的名称为%s进程号为%s"%(P_info,os.getpid()))

time.sleep(5)

pass

def main():

#创建两个进程

p1 = Process(target=print_process_info, args=("p1",))

p2 = Process(target=print_process_info, args=("p2",))

# 开启两个进程

p1.start()

p2.start()

if __name__ == "__main__":

main()

进程可被看做划分资源的单位,进程只负责请求系统资源,然后交由进程内部的线程负责完成任务(进程相当于车间流水线)

线程是实际执行任务的单位,多任务效率的提升主要依赖于线程的数量(线程相当于流水线的工人)

协程是比线程更小占用更小执行单元

Python,多线程和多进程是两种并发处理的方式,它们可以同时执行多个任务,提高程序的效率和响应速度。 多线程是在同一个进程内部创建多个线程,每个线程可以独立执行不同的任务,共享同一个进程的内存空间,因此线程之间的通信和数据共享比较方便。但是,由于Python的全局解释器锁(GIL)机制,多线程并不能真正实现并行执行,只是通过多个线程间的切换快速执行多个任务。 多进程则是在不同的进程创建多个子进程,每个子进程独立执行不同的任务,占用独立的内存空间,因此进程之间的通信和数据共享比较困难。但是,多进程可以真正实现并行执行,因为不同进程之间的代码是完全独立的,可以同时执行。 下面是一个简单的示例,演示如何使用多线程和多进程执行任务: ```python import threading import multiprocessing # 定义一个函数,用于在多线程和多进程执行 def worker(num): print("Worker {} is running".format(num)) # 使用多线程执行任务 for i in range(5): t = threading.Thread(target=worker, args=(i,)) t.start() # 使用多进程执行任务 for i in range(5): p = multiprocessing.Process(target=worker, args=(i,)) p.start() ``` 在这个示例,我们首先定义了一个函数worker,用于在多线程和多进程执行。然后,我们使用for循环创建5个线程和5个进程,每个线程进程都调用worker函数执行任务。在多线程,我们使用threading.Thread类创建线程,并调用start()方法启动线程。在多进程,我们使用multiprocessing.Process类创建进程,并调用start()方法启动进程
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值