python网络基础之进程,线程,协程

进程,协程,线程的一些总结

# 1.进程:操作系统分配资源的基本单元,multiprocess模块提供了Process类来代表一个进程对象,这个对象可以理解为是一个独立的进程,可以执行另外的事情

# 创建进程时,只需要传入一个执行函数和函数的参数,创建一个 Process 实例,用 start()方法启动
# target指向函数,相当于调用函数,args传参,由于传的是元组,一个参数时,参数后面必须加" , "
#   p1 =  multiprocessing.Process(target=download_from_web,args=(q,))
#   p1.start()

# 多进程之间通过队列(queue先进先出)实现数据共享:创建一个队列q=multiprocessing.Queue(),
# 一个进程Queue中写数据q.put(temp),另一个进程从Queue获取数据q.get()

# 进程池:有多个进程同时执行时,我们可以添加进程池来限制最大进程数
# 导入进程池:from multiprocessing import Pool
# 定义一个进程池,最大进程数是3,---> po = Pool(3)
# 每次循环将会空闲出来的子进程调用的目标------>Pool().apply_async(要调用的函数,(传递给函数的参数元祖))
# po.close() 关闭进程池,关闭后po不再接收新的请求
# po.join()  主进程等待po所有的子进程结束完成,必须放在close后

# 定时器:导入time模块,time.sleep(time s) ---->让进程睡多少时间在执行


# 2.线程:线程是进程中的一个实体,是被系统独立调度和分派的基本单位(被cpu调用,看cpu心情分配资源)
# 同一进程中的多个线程之间可以并发执行,线程有就绪、阻塞和运行三种基本状态
# 导入threading模块,提供Thread类来代表一个线程对象

# 创建线程时,只需要传入一个执行函数和函数的参数,创建一个 Thread 实例,用 start()方法启动,格式和进程相似
#   t = threading.Thread(target=service_client, args=(new_socket,))
#   t.start()

# 多线程之间可以资源共享,但会造成资源竞争,通过线程锁(互斥锁Lock)限制某一时刻只有一个线程能访问某个指定的数据
# 创建一个互斥锁,默认是没有上锁的 mutex = threading.Lock() -----相当于许多人上一个厕所,我进去把厕所门锁住,它们只能等我开锁自己出来,然后下一个进去
# 在需要上锁的地方上锁mutex.acquire(),需要解锁的时候解锁mutex.release()


# 3.协程:操作是程序员指定的,在python中通过yield,人为的实现并发处理,可以自动切换
# 导入模块:import gevent
# 由于gevent中有自己的time方法,所以我们只需要导入monkey:from gevent import monkey--->monkey.patch_all()自动休眠
# 协程gevent是由迭代器,生成器,greenlet等一步步封装而成的,一般我们直接使用gevent就可以了
# gevent.joinall()将任务和参数进行统一调度,实现单线程中的协程,实现并发执行
# gevent.spawn(调用函数, 传递的参数)


# 进程,线程,协程的区别
# 一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程
# 资源分配给进程,同一进程中的所有线程共享该进程的所有资源
# 线程可以共享,进程不能共享
# 进程占资源,速度慢,线程比进程快,占资源少,协程有比线程快,占用资源少

猜你喜欢

转载自blog.csdn.net/yilv12123/article/details/84646984
今日推荐