work

Python装饰器高级用法

邮差的信 提交于 2020-02-15 10:41:17
在 Python 中, 装饰器 一般用来修饰函数,实现公共功能,达到代码复用的目的。在函数定义前加上 @xxxx ,然后函数就注入了某些行为,很神奇!然而,这只是 语法糖 而已。 场景 假设,有一些工作函数,用来对数据做不同的处理: def work_bar(data): pass def work_foo(data): pass 我们想在函数调用前/后输出日志,怎么办? 傻瓜解法 logging.info('begin call work_bar') work_bar(1) logging.info('call work_bar done') 如果有多处代码调用呢?想想就怕! 函数包装 傻瓜解法无非是有太多代码冗余,每次函数调用都要写一遍 logging 。可以把这部分冗余逻辑封装到一个新函数里: def smart_work_bar(data): logging.info('begin call: work_bar') work_bar(data) logging.info('call doen: work_bar') 这样,每次调用 smart_work_bar 即可: smart_work_bar(1) # ... smart_work_bar(some_data) 通用闭包 看上去挺完美……然而,当 work_foo 也有同样的需要时,还要再实现一遍 smart_work

python celery 多work多队列

天大地大妈咪最大 提交于 2020-02-13 22:31:52
1.Celery模块调用 既然celery是一个分布式的任务调度模块,那么celery是如何和分布式挂钩呢,celery可以支持多台不通的计算机执行不同的任务或者相同的任务。 如果要说celery的分布式应用的话,就要提到celery的消息路由机制,AMQP协议。具体的可以查看AMQP的文档。简单地说就是可以有多个消息队列(Message Queue),不同的消息可以指定发送给不同的Message Queue,而这是通过Exchange来实现的。发送消息到Message Queue中时,可以指定routiing_key,Exchange通过routing_key来把消息路由(routes)到不同的Message Queue中去。 多worker,多队列,实例: 1.在服务器上编写文件tasks.py。首先定义一个Celery的对象,然后通过celeryconfig.py对celery对象进行设置。之后又分别定义了三个task,分别是taskA, taskB和add。 #!/usr/bin/env #-*-conding:utf-8-*- from celery import Celery,platforms platforms.C_FORCE_ROOT = True app = Celery() app.config_from_object("celeryconfig") @app

二.python3 入门

时光毁灭记忆、已成空白 提交于 2020-02-13 16:32:53
执行python方式 交互器 缺点 程序不能永久保存,主要用于简单的语法测试 文件执行 IDE integrated development environment VIM 经典的linux下的文本编辑器 emacs linux 文本编辑器,比VIM更容易使用 eclipse java ide,支持 python,c ,c++ visual studio 微软开发的ide,python,c++,java,c# notepad++ sublime python开发的 pycharm 是主要用于python开发的ide 变量 标识符的第一个字符必须是字母表中的字母(大写或小写)或者一个下划线(‘ _ ’) 标识符名称的其他部分可以由字母(大写或小写)、下划线(‘ _ ’)或数字(0-9)组成。 有效 标识符名称的例子有i、__my_name、name_23和a1b2_c3。 无效 标识符名称的例子有2things、this is spaced out和my-name。 标识符名称是对大小写敏感的。例如,myname和myName不是一个标识符。注意前者中的小写n和后者中的大写N。 常量:数值不变的 变量:数值会变动的量 name = "Alex li" name2 = name #name2和name没关系,指向内存中的Alex li print("My name is",name)

15 Things You Can Do Right Now To Help Your Career

烂漫一生 提交于 2020-02-13 04:13:09
Most career advice you receive focuses on the big picture: how to get ahead, how to “win,” and such things that are on a much larger scale than the daily grind that most of us face. In fact, it is that day to day grind that pulls down many of us - we go to work, come home exhausted, and often feel as though we’re just spinning our wheels. If you want to get ahead in your career and in your life, you need to start small and look at the immediate things you can do to help out your situation. If you’re sitting out there at your desk, tiredly wondering if there’s something better that you can be

Linux驱动开发之中断编程

时光毁灭记忆、已成空白 提交于 2020-02-12 22:56:05
2020-02-12 关键字: 在 Linux 内核当中,处理一个中断事件需要知道两件事: 1、中断号码 2、中断处理函数 而在 ARM 中处理中断则需要知道以下四件事: 1、中断源号码 2、初始化中断控制器 3、初始化 CPU 中断功能 4、中断处理函数 获取中断号有以下两种方式: 1、宏定义 通过查询芯片手册上记载的相应中断编号,再经过系统预置的 IRQ_EINT(编号) 来得到中断号。 2、设备树文件 首先查询相应设备树头文件 dtsi,找到我们要用的那个中断组的描述,形如下所示: gpx1: gpx1{   gpio-controller;   #gpio-cells = <2>;   interrupt-controller;   interrupt-parent = <&gic>;   interrupts = <0 24 0>, <0 25 0>, <0 26 0>, <0 27 0>, <0 28 0>;   #interrupt-cells = <2> }; 上面的 interrupt-controller; 表示以下描述的是和中断控制器相关的信息。 interrupts 描述的是 gpx1 这个节点所要控制或者说使用的中断号列表。 #interrupt-cells 描述的是长度,记住是长度就好了。 其次再在我们自己的 dts 里添加上我们想要的中断信息节点:

Threadx 字节内存池内存释放_tx_byte_release

旧城冷巷雨未停 提交于 2020-02-11 12:30:12
_tx_byte_release _tx_byte_release用于内存释放,原理参考上篇博文: Threadx 内存管理-内存字节池 UINT _tx_byte_release ( VOID * memory_ptr ) { TX_INTERRUPT_SAVE_AREA REG_1 TX_BYTE_POOL * pool_ptr ; /* Pool pointer */ REG_2 TX_THREAD * thread_ptr ; /* Working thread pointer */ REG_3 CHAR_PTR work_ptr ; /* Working block pointer */ REG_4 TX_THREAD * susp_thread_ptr ; /* Suspended thread pointer */ UINT preempt = 0 ; /* Preemption counter */ /* Determine if the memory pointer is valid. */ #def 记录要释放内存起始地址 work_ptr = ( CHAR_PTR ) memory_ptr ; if ( work_ptr ) { /* Back off the memory pointer to pickup its header. */ #def

线程池的原理和连接池的原理

亡梦爱人 提交于 2020-02-11 01:19:37
一、 线程池的原理 : 线程池,究竟是怎么一回事?其实线程池的原理很简单,类似于操作系统中的缓冲区的概念,它的流程如下: 先启动若干数量的线程,并让这些线程都处于睡眠状态,当客户端有一个新请求时,就会唤醒线程池中的某一个睡眠线程,让它来处理客户端的这个请求,当处理完这个请求后,线程又处于睡眠状态。 可能你也许会问:为什么要搞得这么麻烦,如果每当客户端有新的请求时,我就创建一个新的线程不就完了?这也许是个不错的方法,因为它能使得你编写代码相对容易一些,但你却忽略了一个重要的问题——性能! 就拿我所在的单位来说,我的单位是一个省级数据大集中的银行网络中心,高峰期每秒的客户端请 求并发数超 过100,如果为每个客户端请求创建一个新线程的话,那耗费的CPU时间和内存将是惊人的,如果采用一个拥有200个线程的线程池,那将会节约大量的的系统资源,使得更多的CPU时间和内存用来处理实际的商业应用,而不是频繁的线程创建与销毁。 二、 数据库连接池 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。 一个数据库连接对象均对应一个物理数据库连接,每次操作都打开一个物理连接,使用完都关闭连接,这样造成系统的 性能低下。 数据库连接池的解决方案是在应用程序启动时建立足够的数据库连接,并讲这些连接组成一个连接池(简单说:在一个“池”里放了好多半成品的数据库联接对象)

绿洲作业第一周 - 美术Art work

假装没事ソ 提交于 2020-02-10 11:20:04
Dear parents, Please remind your child to learn and finish the work as follows from the art teacher: To continue what Year Three have been learning about Shading and how to use line and shadow to create 3D drawing. This is different example using the same elements to create a trick of the eye 3D effect . You may need to to practise several times before you succeed.看这个视频学习怎么利用线和阴影来画立体效果图。https://v.youku.com/v_show/id_XNDUzOTQwNjU1Ng==.html 来源: https://www.cnblogs.com/junewen2020/p/12290118.html

Failed to run the WC DB work queue associated with 错误的解决

眉间皱痕 提交于 2020-02-10 09:10:29
转载自 http://blog.csdn.net/alan00000/article/details/44084455 svn checkout 代码是出现如标题的错误,提示我clean up ,clean up失败,于是网上搜到了这一clean up 失败的解决方法,clean up 后再进入代码update 就可以了 svn提交遇到恶心的问题,可能是因为上次cleanup中断后,进入死循环了。 错误如下: 解决方法:清空svn的队列 1.下载 sqlite3.exe 2.找到你项目的.svn文件,查看是否存在wc.db 3.将sqlite3.exe放到.svn的同级目录 4.启动cmd执行sqlite3 .svn/wc.db "select * from work_queue" 5.看到很多记录,下一步执行delete from work_queue 6.ok了,现在在到项目里面,执行cleanup,完全没问题了,图标状态也已经恢复了。 来源: https://www.cnblogs.com/yangcclg/p/5292260.html

SVN cleanup 反复失败解决办法

雨燕双飞 提交于 2020-02-09 04:04:48
svn cleanup cleaning up 操作反复失败,svn提示的问题是版本需要更新,更新成最新的版本之后,依旧反复失败,陷入死循环。还好找一个blog上的方法试了一下,成功了。 先说故障环境: OS: win7 x64 TortoiseSVN 1.9.5, Build 27581 - 64 Bit , 2016/11/26 09:18:58 Subversion 1.9.5, -release apr 1.5.2 apr-util 1.5.4 serf 1.3.9 OpenSSL 1.0.2j 26 Sep 2016 zlib 1.2.8 SQLite 3.14.1 1. 先下载sqlite3的客户端命令行程序:http://www.sqlite.org/download.html 2. 找到.svn 路径下wc.db 这个文件。通过 sqlite3 wc.db "select * from work_queue" 先查看一下里面的记录,应该能看到文件的变更记录,这些应该就是没有正常操作遗留下来的变更。 3. 清空work_queue 这个表 sqlite3 wc.db "delete from work_queue" 4. 再次clean up 5. 成功。 来源: https://www.cnblogs.com/dehuachenyunfei/p/7865042