前言:

本文介绍了协程操作()的例子,以及使用协程实现多任务(定时交替协同执行)。 分享给大家,供大家参考,具体如下:

提示:实现多任务:进程消耗资源最大,线程消耗第二大资源,协程消耗资源最少(单线程)。

协程是通过阻塞代码(如网络延迟等)来实现自动切换要执行的任务的。 因此,在执行IO密集型程序(例如爬虫)时,使用它们可以提高效率(有效利用网络延迟时间来执行其他任务)。

GIL(全局解释器锁)是C语言版本解释器独有的。 GIL的存在使得多线程效率降低(哪个线程抢到锁就执行)。 在IO密集型程序中,多线程仍然比单线程效率更高(GIL通过IO阻塞自动切换多线程)。

解决GIL(全局解释器锁)问题的三种方法:

1.不要使用C语言版本的解释器。

2、让子线程运行其他语言代码(例如:主线程运行代码,子线程运行C语言代码(C语言的动态库))。

3、多进程代替多线程(多进程可以利用多核CPU)。

demo.py(协程底层原理,yield):

python多线程_线程是什么意思_线程池

demo.py(实现协程,封装yield):

python多线程_线程是什么意思_线程池

demo.py(实现协程,对其进行封装,遇到阻塞代码时自动切换协程任务):

python多线程_线程是什么意思_线程池

运行结果:

线程池_python多线程_线程是什么意思

demo.py(补丁,自动替换原生阻塞代码。重要,常用):

python多线程_线程是什么意思_线程池

运行结果:

线程池_线程是什么意思_python多线程

demo.py(底层原理):

线程是什么意思_线程池_python多线程

 try:
 recv_data = client_socket.recv(1024) # 用抛异常的方式代替阻塞。
 except Exception as ret:
 print("----这个客户端还没有发送过来数据----")
 else:
 if recv_data:
 # 对方发送过来数据
 print("----客户端发送过来了数据-----")
 else:
 # 对方调用close 导致了 recv返回
 client_socket.close()
 client_socket_list.remove(client_socket)
 print("---客户端已经关闭----")

好了,今天的主题就讲到这里吧,不管如何,能帮到你我就很开心了,如果您觉得这篇文章写得不错,欢迎点赞和分享给身边的朋友。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注