Python
Python实战
狄森
全栈工程师(Golang+Flutter)
展开
-
带你搞懂python协程 (async await asyncio)
为什么现在越来越多的语言都开始支持协程?一般来说, 一个线程栈大小为1MB, 如果都用多线程, 那么在高并发下, cpu大部分的时间都将用于切换线程上下文, 而且线程的切换是在内核态完成的, 会耗费额外的空间和时间.而且由于内存都分配给线程栈了, 将频繁地进行内存置换算法, 浪费了很多cpu时间片.协程, 可以理解为一种在线程里跑的子线程, 它的默认栈空间很小 (比如go的协程栈默认大小为2KB).当多个协程在一个线程上运行时, 协程间会切换着运行, 协程的切换完全在用户态完成, 而且时机由程序员原创 2022-03-25 11:23:49 · 6373 阅读 · 0 评论 -
解决: smtplib发送邮件报错smtplib.SMTPServerDisconnected: Connection unexpectedly closed
smtplib发邮件经常报错:smtplib.SMTPServerDisconnected: Connection unexpectedly closedserver = smtplib.SMTP_SSL(mail_host)server.connect(mail_host, 465)server.login(mail_user, mail_pass)这样有时可以, 但隔几小时就不行了, 百度后发现再加上下面这一句就可以了server = smtplib.SMTP_SSL(mail_host,原创 2021-10-12 10:34:47 · 15598 阅读 · 0 评论 -
peewee select for update 悲观锁
百度搜不到相关用法, 官方文档也没写清楚到底怎么写相应的ORM语句后来谷歌终于找到了, 现在分享一下1 悲观锁的写法# SQL语句begin;select stock from tb_sku where id=1 for update; # 对id=1的商品记录加锁, 期间其它用户阻塞访问该记录update tb_sku set stock=stock-5 where id=1;commit;# ORM语句(python Django语法)SKU.objects.select_for_原创 2021-09-22 17:15:47 · 779 阅读 · 0 评论 -
Flask下使用Celery如何避免循环导包?
官方文档的例子中, celery是直接放到app.py里的, 但我们在实际使用时, 异步任务肯定是要放到其他模块的, 但这样很容易导致循环导包, 这篇博客就带你解决这个问题1 安装celery模块pip install celery2 在Flask启动文件创建celery对象(1) app.pyclass Config: # JWT密钥 JWT_SECRET = '1234qaqa' REDIS_HOST = "r-xxx.redis.rds.aliyuncs.com"原创 2021-08-22 14:58:30 · 868 阅读 · 3 评论 -
peewee 多对多 增删改查
1 创建多对多字段class BaseModel(Model): class Meta: database = dbclass Admin(BaseModel): '''管理员表''' email = CharField(verbose_name='邮箱', max_length=30) password = CharField(verbose_name='密码', max_length=12) name = CharField(verbose原创 2021-08-10 17:31:46 · 606 阅读 · 0 评论 -
常用排序算法(python)
1 冒泡排序时间复杂度:O(n2),空间复杂度 O(1)稳定性: 稳定def bubble_sort(nums): for i in range(1, len(nums)): # 正在比较第i趟 flag = False # 本轮是否发生交换的标志位 for j in range(0, len(nums)-i): # 后面i个已排好序 if nums[j] > nums[j+1]: flag =原创 2021-05-26 22:52:24 · 149 阅读 · 0 评论 -
二叉树遍历算法(python)
(1) 先序遍历1) 递归实现def pre_order_trav(root: TreeNode): """先序遍历, 根左右""" if root is None: return return [root.val] + pre_order_trav(root.left) + pre_order_trav(root.right)2) 非递归实现def pre_order_trav(root: TreeNode): """先序遍历, 根左右"""原创 2021-05-23 11:09:47 · 229 阅读 · 0 评论 -
实现单例模式的几种方法
1 __new__魔法方法class Foo(): __instance = None def __init__(self, name): self.name = name def __new__(cls, *args, **kwargs): if cls.__instance is None: cls.__instance = object.__new__(cls) return cls.__instan原创 2021-05-19 23:26:02 · 157 阅读 · 0 评论 -
mac下安装py虚拟环境报错No Module named virtualenvwrapper解决
1 问题描述下面这幅图是在~/.bashrc下添加的内容运行source ~/.bashrc, 结果报错没找到模块, 发现它是从py2.7里面找的2 解决方案~/.bashrc中设置如下内容, 只是在上面加了两行export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3export VIRTUALENVWRAPPER_VIRTUALENV=/usr/local/bin/virtualenvexport WORKON_HOME=~/.pyvirenvs原创 2021-05-04 08:39:19 · 300 阅读 · 0 评论