rpage

python并发模块之concurrent.futures(一)

旧城冷巷雨未停 提交于 2020-11-10 07:28:22
Python3.2开始,标准库为我们提供了concurrent.futures模块,它提供了ThreadPoolExecutor和ProcessPoolExecutor两个类,实现了对threading和multiprocessing的进一步抽象,对编写线程池/进程池提供了直接的支持,他属于上层的封装,对于用户来说,不用在考虑那么多东西了。 官方参考资料:https://pythonhosted.org/futures/ 1.Executor Exectuor是基础模块,这是一个抽象类,其子类分为ThreadPoolExecutor和ProcessPoolExecutor,分别被用来创建线程池和进程池。 提供的方法如下: Executor.submit(fn, *args, **kwargs) fn:为需要异步执行的函数 args,kwargs:为给函数传递的参数 就来看看官网的这个例子: with ThreadPoolExecutor(max_workers=1) as executor: future = executor.submit(pow, 323, 1235) print(future.result())    我们使用submit方法来往线程池中加入一个task(pow函数),submit返回一个Future对象。其中future.result(

Boot | 手把手教你写BootLoader

不打扰是莪最后的温柔 提交于 2020-07-28 09:42:05
在嵌入式操作系统中,BootLoader是在操作系统内核运行之前运行。可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。这段说人话意思就是: 工程中不会将JTAG等烧录口引出但是一定有一个对外的通信口我们升级程序时就可以利用可操作的通信接口把要升级的程序文件发送到芯片再擦写到对应地址的内存中,这样就实现了程序升级。 熊猫大概去年这个时候写的BootLoader工程(以下简称boot),最近正好被朋友问起发现好多细节已经记不清,就赶快写一篇关于boot专题加深记忆也把思路提供给大家。 概 述 针对飞思卡尔的MC9S12XET256芯片(熟悉吗?BMS最老的基础平台MCU)开发了下位机部分,上位机部分软件。上位机软件用的VS平台,语言是C#,下位机用的CW5.1,下载工具是USBCAN-2E-U。 目前一共有三种思路启动boot: 特殊硬件管脚:复位上电之后通过判断PP0管脚输入电平状态判断进入APP还是boot,PP0默认上拉高电平进入APP如果要进入boot则需要复位时按下按键,这种方式用作调试可以但是实际工程中我们根本没有条件操作按键,所以不推荐; 上电进入延时退出:每次上下电复位都先进去boot模式然后等待升级通信指令,如果收到升级指令则开始升级,反之延时耗完进入APP

Postgresql 解决锁表

落花浮王杯 提交于 2020-04-27 05:31:30
转载地址:https://blog.csdn.net/cicon/article/details/68068462 ##一、postgresql解决锁表 --查询是否锁表了 select oid from pg_class where relname='可能锁表了的表' select pid from pg_locks where relation='上面查出的oid' --如果查询到了结果,表示该表被锁 则需要释放锁定 select pg_cancel_backend(上面查到的pid) 12345 二、查看锁的其他方法 转载地址:https://yq.aliyun.com/ask/184?order=ctime -- 用一个函数来将锁转换为数字, create or replace function f_lock_level(i_mode text) returns int as $$ declare begin case i_mode when 'INVALID' then return 0; when 'AccessShareLock' then return 1; when 'RowShareLock' then return 2; when 'RowExclusiveLock' then return 3; when 'ShareUpdateExclusiveLock'