python
python使用笔记
拾牙慧者
会点c++、python;
展开
-
Python常见装饰器使用(实用向)
Python 中有很多好用的装饰器,这里简单介绍8个实用的装饰器辅助代码更加pythonic原创 2023-04-09 20:09:35 · 2300 阅读 · 0 评论 -
【Python】@cache装饰器使用 (依赖cachetools)
cachetools是一个 Python 缓存库,可以用于缓存函数的计算结果,以提高程序的性能和响应速度。使用cachetools可以避免重复计算、减少网络请求、降低数据库负载等问题,从而提高程序的效率和可靠性。cachetools的使用条件是函数的计算结果具有可重复性,即对于相同的输入参数,函数的输出结果始终相同。此外,cachetools还需要一些额外的配置参数,例如缓存的最大大小、缓存的过期时间等。使用cachetools。原创 2023-04-09 18:30:16 · 1140 阅读 · 0 评论 -
python sqlalchemy 动态修改__tablename__
请注意,动态更改表名可能会影响到您的应用程序的正确性和可维护性。因此,请考虑清楚是否真正需要这样做,以及如何规划数据库模式的变化。这是因为ORM框架本身会自动为每个数据模型类创建一个对应的Table对象,并将其存储在该类的。属性直接更新此对象的名称,从而实现动态更改表名的目的。然后,在必要时,我们可以通过访问模型类的。在这个例子中,我们首先定义了一个名为。然后通过函数返回class对象。属性来动态地更改表名。的数据模型,并将其与。原创 2023-03-09 10:57:18 · 778 阅读 · 0 评论 -
【Pysql】session.bulk_save_objects()提高批量插入效率
注意,这里并没有调用 session.add() 方法来添加单个对象,而是直接使用了 bulk_save_objects() 方法插入了整个列表。调用 session.bulk_save_objects(objs) 方法,其中 objs 是要插入的对象列表。方法用于将一个对象列表批量保存到数据库中,可以提高插入数据的效率。调用 session.commit() 方法提交事务,将数据保存到数据库中。创建需要插入的对象列表,每个对象都必须是该 ORM 映射类的实例。原创 2023-03-07 17:23:54 · 868 阅读 · 0 评论 -
【ETCD学习笔记】利用etcd动态更新成员属性(配置下发)
假设我们有个程序要实时显示某个数据的动态变化,metadata存在mysql或其他数据库中;比较挫的方法是我们开一个定时器,不断地去探测数据是否有变化,这明显会生成很多无谓的请求,也对增加对于数据库的压力。最好的办法是让数据库自己在有数据变化的时候将这个变化反馈给我们的程序。显然mysql并没有这个机制,而etcd是有的。下面讲解利用watch机制实现成员属性的动态更新原创 2023-02-19 23:12:49 · 433 阅读 · 0 评论 -
【Python】process使用
1、apply_async2、Manager3、Pool进程池4、queue资源共享5、Pipe6、joinableQueue7、Value_Array进程资源共享原创 2023-02-18 00:58:30 · 198 阅读 · 0 评论 -
【Python】thread使用
1、Condition条件变量使用2、event通信3、Semaphore信号量使用4、setDaemon设置守护线程5、threadPool_map使用6、threadPool使用7、threadingTimer原创 2023-02-18 00:57:12 · 598 阅读 · 0 评论 -
【Python】进程、线程、协程爬虫性能比较
0、协程优缺点总结优点缺点Py协程基础1、svr api 用于测试2、依赖gevent的协程使用3、依赖asyncio的协程使用4、demo代码单进程多协程单进程多线程多进程多协程5、结果统计(取三次平均)原创 2023-02-15 21:32:59 · 1618 阅读 · 0 评论 -
【Python】asyncio使用注意事项
协程的定义协程的运行多个协程运行关于loop.close()回调事件循环原创 2023-02-15 21:25:42 · 407 阅读 · 0 评论 -
上下文管理器的使用(Python and C++)
上下文管理器与RAII原创 2023-02-09 18:57:10 · 595 阅读 · 0 评论 -
Python 如何利用函数修改函数外list?
#在函数内修改列表的时候,在列表后面加上[:],无论几维列表均可。def foo(listA): listA[:] = [1,2,3]def foo2(listB): listB = [1,2,3]listA = [4,5,6]listB = [4,5,6]foo(listA)foo2(listB)print listA #result: [1,2,3]print listB #result: [4,5,6]作者:刘俊麟链接:https://www.zhihu.com/quest转载 2022-03-01 15:54:55 · 1184 阅读 · 0 评论 -
python 实现 topk算法
这里的版本是针对的一个class的某一个成员变量进行的:关于如何定义对象的比较方法,请参考往期文章:python定义对象的比较方法class province_room_quality_data: def __init__(self, room, quality): self.room = room self.quality = quality def __lt__(self, other): return self.quality <原创 2022-01-23 16:39:45 · 2097 阅读 · 0 评论 -
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
json格式不对引起的错误加上if json_rep.content:判空操作json_rep = requests.post(url = monitor_url, headers = monitor_header, json = request)if json_rep == None: logging.info(room_name + " json_rep == None") return 0if原创 2022-01-17 17:30:01 · 1865 阅读 · 0 评论 -
pymysql.err.OperationalError: (1203, “User root already has more than ‘max_user_connections‘ active
max_connections 是指MySQL服务器的最大连接数。即所有用户最大连接数的和。max_user_connections 是指MySQL中单个用户的最大连接数。这里说明当前用户的连接数大于了单个用户的最大连接数,需要扩大连接数:mysql> show variables like '%connect%';+-----------------------------------------------+-----------------+| Variable_name原创 2022-01-17 15:48:34 · 1470 阅读 · 0 评论 -
python数据库连接池使用
在转载|pymysql.err.InternalError: Packet sequence number wrong - got 45 expected 0这一篇中,我使用了方法一。接下来试试方法三,方法三和方法二其实意义差不多,但是对于数据库的连接并不是交由程序员管理而是交由连接池管理了,这里的对于connect的close并非真正的关闭连接,而是将连接重新放入连接池中。首先,我是用的数据库模块是:pymysql,没装的pip install pymysql。连接池我们使用DBUtils,使用前 p原创 2022-01-13 15:19:10 · 1522 阅读 · 1 评论 -
转载|pymysql.err.InternalError: Packet sequence number wrong - got 45 expected 0
原文链接:https://www.cnblogs.com/heiao10duan/p/9373237.html原因:使用了多线程,多线程共享了同一个数据库连接,但每个execute前没有加上互斥锁方法:方法一:每个execute前加上互斥锁 lock.acquire() cursor.execute(command,data) lock.release()方法二:每个线程拥有自己的数据库连接,即在线程调用函数中加上数据库连接代码方法三: 所有线程共用一原创 2022-01-13 14:31:51 · 1512 阅读 · 0 评论 -
转载 | pymysql.err.InterfaceError: (0, ‘‘)解决办法
导致这个错误的原因是通过pymysql连接MySQL,没有关闭连接的操作,所以短时间内不会出问题,长时间保持这个连接会出现连接混乱。虽然看着自己的代码没错,还是会报pymysql.err.InterfaceError: (0, ‘’)错误。所以这个连接要么连上之后,用完就关闭。要么就用下面的代码,检查连接是否存在,断开的话会重连。db = pymysql.connect(host='127.0.0.1',port=3306,user='user', passwd='pwd', db='db_name',转载 2022-01-10 15:57:33 · 620 阅读 · 0 评论 -
python 线程异步执行踩坑
有个需求,一个线程在得到n个数据之后,异步地执行一个子线程函数,在子线程函数中完成数据库的打开、写入数据、关闭操作。在子线程函数返回前父线程先返回结果。version1百度了一下,参考这篇文章:python线程实现异步任务这个代码的执行结果如下:def update_mysql(id): executor.submit(do_update) return "ok" + str(id)def do_update(): time.sleep(3) print('sta原创 2022-01-10 11:35:50 · 1111 阅读 · 0 评论 -
python logging模块简单使用
logging 是线程安全的,也就是说,在一个进程内的多个线程同时往同一个文件写日志是安全的。但是多个进程往同一个文件写日志不是安全的。import loggingLOG_FORMAT = "%(asctime)s - %(levelname)s - %(message)s"DATE_FORMAT = "%m/%d/%Y %H:%M:%S %p"logging.basicConfig(filename = 'my.log', level = logging.DEBUG, format = LOG转载 2021-12-31 16:13:21 · 155 阅读 · 2 评论 -
Python中键映射多个值的方法:defaultdict
Python中键映射多个值的方法有两种:想保持元素的插入顺序就应该使用列表;想去掉重复元素就使用集合并且不关心元素的顺序问题的话应该使用setfrom collections import defaultdictmapping = defaultdict(list)mapping ['key'].append(value)mapping = defaultdict(set)d['key'].add(value)那么我们该如何遍历defaultdict呢:for key, va原创 2021-12-28 20:08:26 · 700 阅读 · 0 评论 -
python深浅拷贝
在python中,对象赋值实际上是对象的引用。当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用。所以一个结构类型被赋给另外一个对象的时候,尽可能不使用 = ,而是使用明确的深拷贝或者浅拷贝。import copy# 深拷贝obj_b = copy.deepcopy(obj_a)# 浅拷贝obj_c = copy.copy(obj_a)...原创 2021-12-24 17:54:01 · 388 阅读 · 0 评论 -
python定义对象的比较方法
有时候我们需要比较两个对象。比如哪个对象大,哪个对象小。如果我们不告诉python如何比较,那么Python是不知道如何进行比较的。下面提供实例#__eq__(self,other):#在使用==比较运算符比较两个对象是否相等的时候会调用这个方法。#如果是相等,那么应该返回True,否则返回False。#__ne__(self,other):#在使用!=比较运算符来比较两个对象是否不相等的时候会调用这个方法。#如果这两个对象不想等,那么应该返回True,否则返回False。#__lt_原创 2021-12-26 00:31:37 · 1677 阅读 · 0 评论