python中对线程的支持的确不够,不过据说python有足够完备的异步网络框架模块,希望日后能学习到,这里就简单的对python中的线程做个总结

threading库可用来在单独的线程中执行任意的python可调用对象。尽管此模块对线程相关操作的支持不够,但是我们还是能够用简单的线程来处理I/O操作,以减低程序响应时间。
from threading import Thread
import time
def countdown(n):
while n > 0:
print('T-minus:', n)
n -= 1
t = Thread(target=countdown, args=(10,))
t.start() # 开启线程
time.sleep(2)
if t.is_alive() is True:
print("停止线程...")
t._stop() # 停止线程
start函数是用来开启线程的,_stop函数是用来停止线程的。为了防止在线程中进行I/O操作时出现阻塞等问题,运行一段时间之后,可以判断线程是否还存活,如果线程还存在就调用_stop()停止,防止阻塞(你可以将_stop函数封装到类中,我这里并没有这么做)。
当然,你可以调用ThreadPool线程池来处理,而不是手动创建线程。如果线程间不需要共享变量的话,使用线程还是很方便的,可以减少很多的麻烦操作以及省时。如果需要在线程间进行通信,我们可以使用队列来实现:
from queue import Queue
from threading import Thread
class kill:
def terminate(self, t):
if t.isAlive is True:
t._stop()
def product(out_q):
for i in range(5):
out_q.put(i)
def consumer(in_q):
for i in range(5):
print(in_q.get())
q = Queue()
t1 = Thread(target=consumer, args=(q,))
t2 = Thread(target=product, args=(q,))
t1.start()
t2.start()
k = kill() # 查询线程是否终止,防止阻塞...
k.terminate(t1)
k.terminate(t2)
Queue实例会被所有的线程共享,同时它又拥有了所有所需要的锁,因此它们可以安全的在任意多的线程共享。在这里要注意,不要再多线程中使用除了put(),get()方法之外的queue类的方法,因为在多线程环境中这是不可靠的!对于简单的小型的线程中数据的通信,可以使用队列来处理。如果是大型的数据需要交互通信,python提供了相关的模块你可以使用,具体的u need baidu.
所谓协程,其实就是在单线程的环境下的yield程序。
from collections import deque
def countdown(n):
while n > 0:
print("T-minus", n)
yield # 返回之后下次直接从这里执行...相当于C#里面得yield return .
n -= 1
print("this is countdown!!!")
def countup(n):
x = 0
while x < n:
print("Counting up", x)
yield
x += 1
class TaskScheduler:
def __init__(self):
self._task_queue = deque()
def new_task(self, task):
self._task_queue.append(task)
def run(self):
while self._task_queue:
task = self._task_queue.popleft()
try:
next(task)
self._task_queue.append(task)
except StopIteration:
pass
sche = TaskScheduler()
sche.new_task(countdown(10))
sche.new_task(countdown(5))
sche.new_task(countup(15))
sche.run()
在这里说下自己这段时间使用python的心得,python的确不错,但性能也是为人诟病,一开始学习python,我也是去做一些比较炫的程序,最起码听起来格调高,比如使用python的自然语言处理来做情感分析以及最热的爬虫程序,还有做炫的数据分析图表。渐渐地,我就放下了那些,因为程序的重点不在那些,只要你会点基本的语法,看得懂官方文档就能够做出来,而程序代码的重点在性能,优化。最大程度的写出功能最完善,性能最优,结构最优美的程序,其实这就有点像是老师常说的"文化软实力",程序中的"软实力"应该是在程序中嵌入最适合的设计模式,做最完备的程序优化,采用最省性能的数据结构等。
以上这篇python简单线程和协程学习心得(分享)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
# python 协程 线程
# 你可以
# 给大家
# 可以使用
# 多线程
# 这是
# 我就
# 是在
# 在这里
# 自然语言
# 在这
# 你会
# 不需要
# 是用来
# 这段
# 这就
# 数据结构
# 要注意
# 希望能
# 去做
# 做个
相关文章:
建站之星收费标准详解:套餐费用及年费价格表一览
建站之星安装模板失败:服务器环境不兼容?
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
寿县云建站:智能SEO优化与多行业模板快速上线指南
c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】
建站之星免费版是否永久可用?
如何用免费手机建站系统零基础打造专业网站?
孙琪峥织梦建站教程如何优化数据库安全?
沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?
如何登录建站主机?访问步骤全解析
深圳企业网站制作设计,在深圳如何网上全流程注册公司?
高性能网站服务器部署指南:稳定运行与安全配置优化方案
高防服务器租用如何选择配置与防御等级?
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
如何用已有域名快速搭建网站?
电商平台网站制作流程,电商网站如何制作?
ui设计制作网站有哪些,手机UI设计网址吗?
如何在万网主机上快速搭建网站?
公众号网站制作网页,微信公众号怎么制作?
如何用PHP快速搭建CMS系统?
自助网站制作软件,个人如何自助建网站?
安徽网站建设与外贸建站服务专业定制方案
开源网站制作软件,开源网站什么意思?
建站上传速度慢?如何优化加速网站加载效率?
公司门户网站制作流程,华为官网怎么做?
已有域名如何快速搭建专属网站?
,怎么用自己头像做动态表情包?
如何在西部数码注册域名并快速搭建网站?
全景视频制作网站有哪些,全景图怎么做成网页?
,网站推广常用方法?
台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?
手机怎么制作网站教程步骤,手机怎么做自己的网页链接?
建站主机是什么?如何选择适合的建站主机?
如何快速使用云服务器搭建个人网站?
简历在线制作网站免费版,如何创建个人简历?
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
建站DNS解析失败?如何正确配置域名服务器?
建站主机助手选型指南:2025年热门推荐与高效部署技巧
如何用VPS主机快速搭建个人网站?
Android自定义listview布局实现上拉加载下拉刷新功能
建站主机与虚拟主机有何区别?如何选择最优方案?
宝塔建站无法访问?如何排查配置与端口问题?
*服务器网站为何频现安全漏洞?
网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?
黑客如何利用漏洞与弱口令入侵网站服务器?
盘锦网站制作公司,盘锦大洼有多少5G网站?
建站主机类型有哪些?如何正确选型
c# 在ASP.NET Core中管理和取消后台任务
如何批量查询域名的建站时间记录?
如何选择靠谱的建站公司加盟品牌?
*请认真填写需求信息,我们会在24小时内与您取得联系。