首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

以下哪些字符可以用于定义Python标识符_if可以作为用户标识符吗

1. 有效的Python标识符规则:(1)长度是任意长度;(2)标识符不能具有相同的名称作为关键词;(3)在Python的版本,用一个ASCII字母或下划线标识符开始,并且可以紧随其后的是字母,数字,下划线;在Python中,标识符ASCII字母、下划线和大多数非英语语言字母,只要用Unicode编码的字母可以作为主要人物,和随后的字符可以是任何主角,或任何的字符进行技术改造,包括任何在Unicode字符被认为是一个数字。(所以你可以用阿拉伯文、中文、日语和俄语字符或字符在任何其他语言支持Unicode字符集命名)2。约定:(1)不使用Python预定义的标识符的名称,所以避免使用NotImplemented Eliiipsis等名字,这可能是用于新版本的Python在未来;

02

记一次协程环境下类成员变量污染的问题

我维护的项目采用的技术框架是php中基于swoole的一个web框架叫做swoft。该框架是协程环境,并且是模仿springboot的一个注解式的php框架。我做的一个需求,发生了协程环境下的类成员变量污染的问题。事故是这样的:发起一次rpc请求,返回的结果存在一个类的成员变量,但是发现请求的参数跟结果对不上,我先是排查了错误日志,没发现异常,然后排查请求执行日志,发现日志数量丢失了。于是我仔细看了代码,我通过职责链模式将结果传递到了每一个类的成员变量中,而BeanFactory::getBean这个方法默认是获取单例的类,于是类的成员变量在没有保护的情况下被其他协程污染了。知道这个问题后,我通过修改注解,将职责链的每一个类都修改成多例模式。在本地使用Jmeter压测时结果是正确的,但是又发现了一个新的问题就是执行日志丢失的问题。后面仔细查看了swoft中log包的实现,发现框架开发组也犯了一个跟我一样的错误。他这里的思路是:将日志存放在类的成员变量messages中,这是一个数组,当这个数组中元素大于刷盘数量时,将该数组中的日志记录刷入文件中。但是却没有线程同步的代码块保护,于是在并发的情况下就可以复现日志被覆盖导致缺失的问题了。我在想框架的开发组不应该会犯这样的错误。于是翻了一下github的swoft框架的issue,发现在20年的时候就已经有人提出过这个问题,但是一直没有得到修复。后面我翻看了一下源码,发现他的log这个bean是单例模式,所以才有messages成员变量被污染的问题,我通过创建一个新的newLogger类并将其设置在框架启动时的日志处理类,该并发污染的问题就被解决了。

08
领券