python
w妙音
这个作者很懒,什么都没留下…
展开
-
tomli支持数组混合类型
使用python的toml包解析toml配置文件。配置文件中使用了混合类型数组,结果程序报错。原创 2022-08-05 13:54:35 · 990 阅读 · 0 评论 -
celery5.2.1以下版本任务调用多耗费1秒
5.0.5版本celery存在一个缺陷, 调用任务耗时多用1秒 这个问题在5.2.0, 5.1.2同样存在 没理解为什么到5.2.1版本才解决,甚至一度把celery排除python技术栈原创 2021-12-14 16:47:34 · 435 阅读 · 0 评论 -
eventlet如何绿化pyserial最好
问题pyserial访问windows中的串口,如何绿化?不阻塞协程? 效率最高? 绿化毫无疑问要借用tpool.execute.代码该如何实现才最佳呢?方法一: 直接recv直接recv,会阻塞协程缺点: 协程被阻塞,程序不可用方法二: tpool+in_waiting判断import serialfrom eventlet import tpoolclass SerialSocket(serial.Serial): def recv(self): # 读完原创 2021-03-24 19:20:34 · 401 阅读 · 2 评论 -
eventlet.monkey_patch是否影响threading
说明evenlet.monkey_patch()默认会绿化thread,并未看到绿化threading,为什么实际中threading被绿化了,如何证明? 测试代码如下修改evenlet,加上标记语句修改eventlet.green.thread.py的start_new_thread方法,加一条打印语句def start_new_thread(function, args=(), kwargs=None): ... print("hello: ", locals()) g原创 2021-03-24 13:44:22 · 687 阅读 · 0 评论 -
python自定义windowsr日志支持文件分割
描述python自带的RotatingFileHandler,在windows中运行, 分割文件rename时会出问题。因为windows不支持rename正在使用的文件解决办法自定义handler, 按大小和日期切割文件# 原理: handler写文件时调用emit, 其中shouldRollover判断是否要分割, doRollover进行分割. 重写这个两个函数就可以class BaseRotatingHandler(logging.FileHandler): def emit(s原创 2021-01-20 13:35:45 · 326 阅读 · 3 评论 -
eventlet模块中select出现ValueError错误
问题说明如果socket句柄是-1, select.select()在判断句柄状态时会报错 ValueError: file descriptor cannot be a negative integer (-1)而eventlet的select模块没有处理这种异常出现环境windows、python3.8、eventlet 0.26 在使用eventlet开发socket程序时, 如果客户端强制中断连接,会出现如下错误错误描述exception: [WinError 10054] 远程主机强迫原创 2021-01-02 10:33:29 · 1332 阅读 · 3 评论 -
eventlet绿化和patch原理
说明eventlet是一个必备工具,经常用,绿化原理有点忘记了,重新复习一遍.三个主要问题绿化的原理是什么?绿化怎么管理?绿化怎么引入?绿化原理利用select/epolls/kqueue等操作系统提供的非阻塞操作,将阻塞改为非阻塞.引用管理eventlet在import之后,将模块中的属性绿化.用一小段代码来查看看import sysimport eventlet# eventlet.monkey_patch()httplib2 = eventlet.impo原创 2020-11-21 12:06:32 · 533 阅读 · 0 评论 -
实用工具状态机transitions
说明状态机是一个非常实用的理论。在涉及到复杂的场景,建立状态机模型,能带来极大的方便。比如,网络连接、模型状态、业务逻辑。状态机并不复杂, 重要的是它的思想,能够极大减轻复杂度。使用时关键在于定义事件和动作。基本概念State: 状态Event: 事件. 事件触发状态变换Action: 动作. event发生前或后执行的动作transition: 变换. 状态变换githubhttps://github.com/pytransitions/transitions安装pip原创 2020-11-21 09:31:38 · 756 阅读 · 0 评论 -
eventlet并发读写socket出现Second simultaneous问题
描述celery+eventlet实现任务调用时出现RuntimeError: Second simultaneous read on fileno 14 detected. Unless you really know what you’re doing, make sure that only one greenthread can read any particular socket模拟错误网上找的一段代码,模拟出同样问题def main(): import eventlet原创 2020-07-08 10:52:10 · 786 阅读 · 1 评论 -
celery配合redis出现redis.exceptions.InvalidResponse Protocol Error
说明celery+redis实现异步任务,如果涉及到频繁的io调用,可能会出现错误redis.exceptions.InvalidResponse: Protocol Error错误内容redis.exceptions.InvalidResponse: Protocol Error: {, b'\"status\": \"SUCCESS\", \"result\":xxxx \"traceback\": null, \"children\": [], \"date_done\": \"2020-06-原创 2020-06-21 09:30:28 · 1368 阅读 · 2 评论 -
eventlet在ubuntu上出现OSError protocol not found
描述tensorflow的nvidia docker镜像使用ubuntu16.04, ubuntu是精简之后的,有些包可能没有。在上面运行eventlet会出现下面问题错误内容Traceback (most recent call last): File "/app/defect-client/defect_client/cmd/wafer-worker.py", line 14, in <module> import eventlet File "/usr/local/原创 2020-06-21 09:25:11 · 1257 阅读 · 1 评论 -
celery变量共享
问题很多情况下我们想让task共享变量,该怎么做?celery的并发原理celery的并发任务池,有eventlet, gevent, prefork, thread类型eventlet/gevent协程: 只有一个进程一个线程, 全局变量在task之间共享prefork属于multiprocessing: multiprocessing全局变量也是共享的thread多线程: 全局变量共享验证方法用ab命令模拟大量并发,很容易测试出来ab -n 1000 -c 100 -p ./post.原创 2020-06-21 09:21:18 · 1396 阅读 · 2 评论 -
protobuf序列化numpy
说明protobuf处理不能直接处理numpy,需要先把numpy转为字节numpy转字节import numpy as npfrom io import BytesIOA = np.array([ 1, 2, 3, 4, 4, 2, 3, 4, 5, 3, 4, 5, 6, 7, 2, 5, 6, 7, 8, 9, 6, 7, 8, 9, 0 ]).reshape(5,5) # numpy 转bytesnda_bytes原创 2020-06-15 15:05:38 · 1679 阅读 · 0 评论 -
object-detection图片切割提示Invalid argument: Key: image/object/mask错误
ensorflow的object-detection切割图片出现错误tensorflow.python.framework.errors_impl.InvalidArgumentError: 2 root error(s) found. (0) Invalid argument: Key: image/object/mask. Data types don't match. Expec...原创 2020-04-14 14:16:08 · 408 阅读 · 0 评论 -
gettext国际化用法示例
安装gettextsudo yum install gettextgettext工具gettext: 进行translate。xgettext: 从程序中抽取调用gettext进行本地化的字符串,生成一份.po结尾的配置文件。msgfmt: 将配置好的本地化配置文件进行转换成gettext使用的格式。准备demo.py#encoding=utf-8import gettext# demo原创 2015-09-09 16:26:47 · 2583 阅读 · 0 评论 -
pyinstaller编译出的exe被杀毒软件认为是木马
把python文件转为独立的exe,放在windows上运行。结果腾讯管家马上提示有可能是木马把它删除了一脸懵逼,我良民,咋成木马了呢。思前想后,我做了什么,被认为很危险。原来我用了os.system。下面是演示python文件#xxx.pyimport oscmd="xxxxx"os.system(cmd)编译exe#编译完成,系统提示发现木马python -m P...原创 2018-11-25 10:17:44 · 29222 阅读 · 3 评论 -
pyinstaller黑色窗口一闪而过怎么去掉
默认情况下pyinstaller编译出的exe有cmd窗口。给它设置了-w选项,可以把它去掉。为什么我加了,还是会出现一闪而过的黑色窗口加上-w选项python -m PyInstaller xxx.py -w不要用os.systemos.system("xxx") #会调用cmd.exe,所以会出现黑色窗口#改用subprocess,不会出现黑色窗口subproces...原创 2018-11-25 10:18:28 · 4803 阅读 · 0 评论 -
uwsgi: option is ambiguous: http
从官网上下载的uwsgi包含所有的插件。其它来源的uwsgi可能被人改过了。例如,为了减小体积,会删除uwsgi不必要的插件。环境alpine中运行uwsgi示例:启动uwsgi提供http访问接口,出现错误#报错的原因就是这个uwsgi没有http插件~ # uwsgi --http :9090 --plugins http,python3[uWSGI] getting INI c...原创 2018-11-26 21:27:24 · 3694 阅读 · 0 评论 -
没有契合的数据库迁移工具,用pymysql实现一个
版本迭代少不了数据迁移,python有自己的数据库迁移工具migrate。如果有的是其它开发语言,或者没有契合的迁移工具。怎么自己做一个?环境说明项目开发语言:java数据库: mysql迁移脚本: pythonpython工具包: pymysql实现思路目标是将老版本的数据转为新版本的数据。1. show tables 查询所有的表 ---得到所有表名2. 注意tranc...原创 2019-01-01 11:16:52 · 337 阅读 · 0 评论 -
用最简单方法解决api接口安全问题,几乎无法破解
场景描述项目需要为第三方提供api服务接口。接口涉及到核心功能,如何保证接口安全。防止伪造身份、篡改数据?思路保障数据安全最好的方法,当然是加密了。无法解析内容,自然无法伪造,篡改。可是使用https证书需要收费的。有其它方法么?有的。消息哈希认证(hmac)。算法描述访问者1. 当访问接口时, 将参数按key值排序,组成key1=value1&amp;key2=va...原创 2019-01-01 11:47:07 · 15907 阅读 · 13 评论 -
numba加速python学习与尝试
简介探索python性能优化工具,发现了numba. 只需要给函数加上装饰器就可以。比cython和pypy方便多了。numba是什么numba是为了提高numpy速度而开发的,使用llvm将python代码翻译为bitcode,并在bitcode外面做了一层包装,让python可以调用通过numba翻译的代码由于经过llvm优化并可在机器上直接执行,效率将有所提高,对海量数据处理非常...原创 2019-01-20 09:12:06 · 2475 阅读 · 2 评论 -
使用numba的姿势不正确反而导致性能下降
numba能够极大的提高python在计算方面的性能。是不是所有的python代码上,都可以加上numba.jit装饰器?答案是否定的。示例环境python3.6fedorapymysql示例很常见的例子,从数据库从查询一千条数据,再进行简单的格式转换。#coding=utf-8import timefrom numba import jitimport pym...原创 2019-01-20 09:14:33 · 6204 阅读 · 1 评论 -
利用qq邮箱作为个人邮件服务器发送邮件
需求描述邮件通知很有用处。如何搭建一个邮件服务器,允许发送邮件呢?实现方法一、利用开源软件,搭建自己的邮件服务器。二、利用qq等第三方邮件服务。自己搭邮件服务器较麻烦,我的需求比较简单,利用qq邮件,发送邮件即可,下面是方法.设置方法1.开启服务,获取授权码邮箱设置–>帐户–>开启"IMAP/SMTP服务"开启成功后,会给出一个授权码.授权码就是发送邮件时的...原创 2019-04-06 07:43:43 · 6931 阅读 · 0 评论 -
docker运行gunicorn看不到控制台输出
项目做成了docker镜像, 以gunicorn命令运行, print输出为什么没有写到docker日志?docker-compose文件如下version: '2'services: xxx.xxx: image: xxx:1.0 volumes: - /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime...原创 2019-04-06 07:57:09 · 3321 阅读 · 0 评论 -
socketio与apscheduler并用
layout: postauthor: “妙音”title: “socketio与apscheduler并用”date: 2019-04-08 21:51category: flasktags: [“socketio”, “apscheduler”]description: “flask项目引入了flask-socketio提供websocket通信,同时需要flask-apsche...原创 2019-04-28 10:12:36 · 532 阅读 · 0 评论 -
快速生成千万条mysql数据
目的学习、测试mysql海量数据的场景,需要先生成数据。思路mysql官方文档说得很清楚。”load data infile”导入数据比insert要快20倍。所以我们先生成一千万条数据的文件。 然后将数据导入表中。生成数据假如有个用户表(id, username,password, age, sex),id是自动增长,我们现在需要生成username等信息 生成一千万条数...原创 2018-09-06 05:30:30 · 4103 阅读 · 1 评论 -
如何判断类是类
在写动态加载时,通常需要过滤出需要的类。如何从模块中过滤出其中的类呢?判断a是类A的实例isinstance(a, A)判断B类是A的子类issubclass(B, A)判断A是一个类isinstance(A, type) 判断B是类并且是A的子类isinstance(B, type) and issubclass(B, A)《寿康宝鉴》有声书http://v.youku.com/v_show/i...原创 2018-06-29 07:26:22 · 423 阅读 · 0 评论 -
windows上subprocess.Popen的参数close_fds=True与stdin/stdout/stderr不能共存
运行命令subprocess.Popen(cmd, close_fds=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)出现错误ValueError: close_fds is not supported on Windows platforms if you redirect stdin/stdout/stderr原因在windo原创 2017-03-21 21:53:30 · 3321 阅读 · 0 评论 -
python多行字符串拼接使用小括号
多行字符串拼接使用小括号s = ('select *' 'from atable' 'where id=888')print s, type(s)#输出select *from atablewhere id=888 <type 'str'>python遇到未闭合的小括号,自动将多行拼接为一行,相比三个引号和换行符,这种方式不会把换行符、前导空格当作字符。原创 2017-02-02 21:32:08 · 6502 阅读 · 0 评论 -
32位python的bug:os.system返回码一直为0
32位python在windows上调用命令行(os.system或subprocess.Popen)。执行后,如果返回码太大,python取得的返回值也是0。 此时无法判断执行成功还是失败,这个是32位python的bug。以时间同步命令w32tm位例子在命令上执行C:\WINDOWS\system32>w32tm /resync发生下列错误: 服务尚未启动。 (0x80070426)C:\W原创 2016-09-26 20:40:30 · 2850 阅读 · 0 评论 -
python paramiko实现ssh远程登录
介绍paramiko是python的一个模块,遵循SSH2协议。 paramiko的功能:1、通过ssh执行命令; 2、通过ssh传输文件。示例import paramikossh = paramiko.SSHClient()ssh.load_system_host_keys()ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy)原创 2015-11-13 20:48:13 · 947 阅读 · 0 评论 -
apscheduler提示maximum错误
起因在tornado中用apscheduler实现计划任务,出现错误提示 “maximum number of running instances reached (1)”2015-12-04 19:10:22,227 - apscheduler.scheduler - WARNING - Execution of job "TaskHandle.progress_job (trigger: dat原创 2015-12-15 21:02:55 · 17211 阅读 · 1 评论 -
利用setuptools的entry_point参数实现模块动态导入
setuptools提供了entry_points参数,允许在安装时,动态导入模块. 下面是简单示例.目录结构 建立如下文件➜ book tree.├── book│ ├── add.py│ ├── __init__.py│ ├── remove.py│ └── update.py└── setup.pyadd.py内容 remove.py、update.原创 2015-07-06 14:31:19 · 925 阅读 · 0 评论 -
supervisor用法
以什么方式运行进程?将它做成服务,再以”service xxx start/stop”方式运行。 或者以”nohup xxx &”方式运行,需要停止时,先ps获得进程id,然后kill掉. 有什么好点的办法?supervisor正好解决这个问题。安装sudo pip install supervisor创建配置echo_supervisord_conf > /etc/supervisor原创 2015-07-09 18:17:53 · 731 阅读 · 0 评论 -
apscheduler如何传递参数给job
import tornadofrom apscheduler.schedulers.tornado import TornadoSchedulersched = TornadoScheduler()def job1(a, b, c): print "job1:", a,b,cdef job2(a, b, c): print "job2:", a,b,csched.add_jo原创 2015-07-03 10:15:08 · 13395 阅读 · 0 评论 -
apscheduler定时任务
使用apscheduler定时任务,可以使用interval任务+cron任务,interval定时更新cron配置信息,cron则实现作业计划。通常用法from apscheduler.schedulers.blocking import BlockingSchedulersched = BlockingScheduler()def my_job(): print 'hello worl原创 2015-06-30 16:48:24 · 1045 阅读 · 0 评论 -
python动态加载是否影响性能
说明看见这个标题觉得有些好笑。受先入为主观念影响,心里隐约觉得动态加载有点慢,最近受一些启发,开始思考java反射、python动态加载的性能问题. 下面是测试python不同加载方式的性能示例有m1.py m2.py m3.py三个文件,内容如下class Test: def func(self): pass测试主体#encoding=utf-8import timei原创 2015-06-07 11:24:08 · 435 阅读 · 0 评论 -
python获取自己的exe路径
exe路径>>> sys.executable'C:\\Python27\\python.exe'lib路径>>> sys.prefix'C:\\Python27\\Lib'原创 2017-04-17 22:47:16 · 11585 阅读 · 4 评论 -
subprocess.Popen(cmd)包含中文怎么办
在windows中通过subprocess调用cmd命令行,命令中包含中文是很令人头痛的事。由于cmd控制台用的是gbk编码,而python用的是utf-8。utf-8的字符串,在gbk编码的控制台上运行,当然会运行不了。假如再要你兼容繁体版的windows,此时更麻烦了。还好python提供了本地化接口本地化>>> import locale>>> locale.getdefaultloca原创 2017-04-22 12:19:56 · 9380 阅读 · 1 评论 -
python取文件后缀
#取文件后缀>>> os.path.splitext("/root/a.py")('/root/a', '.py')#取目录与文件名>>> os.path.split("/root/a.py")('/root', 'a.py')此生必看的科学实验-水知道答案 http://v.youku.com/v_show/id_XMjgzMzcwNDk4OA 为什么观看这部记录片 http://原创 2017-06-22 23:39:59 · 1751 阅读 · 0 评论