Python自动化之定时任务

在日常工作中,我们常常会用到需要周期性执行的任务,一种方式是采用 Linux 系统自带的 crond 结合命令行实现。另外一种方式是直接使用Python。接下来整理的是常见的Python定时任务的实现方式。

Read More

flex布局子元素高度设置无效的解决办法

父元素代码css代码

关键代码是flex-shrink: 0;
当指定view为flex布局后,给子元素定义width和height是不起效果的。原因:定义为flex布局元素的子元素,自动获得了flex-shrink的属性,这个属性是什么意思呢?就是告诉子元素当父元素宽度不够用时,自己调整自己所占的宽度比,这个flex-shrink设置为1时,表示所有子元素大家同时缩小来适应总宽度。当flex-shrink设置为0时,表示大家都不缩小适应。

Read More

GORM查询条件之不定参数的用法

为了根据用户ID(UserID)获取到相应的话题(Topic),我们定义了一个QueryByUserID 的方法,为了表意刻意传入了一个参数,同时在QueryByUserID的最后强行添加了一个args不定参数,从而接受调用时传入的附加的参数,在函数体内根据args的长度对它进行不同方式的应用,达到了优雅扩展QueryByUserID的功能。

Read More

MySQL share mode和for update读锁的区别和应用场景分析

读锁的概念和区别

如果在MySQL的事务里查询数据,然后在同一事务中插入或更新相关数据,常规的SELECT语句不能提供足够的保护。其他并行的事务可以更新或删除第一个事务里刚查询的相同行。 InnoDB支持两种类型的读锁,提供了额外的安全性:

  • SELECT … LOCK IN SHARE MODE

    在读取到的行上设置共享锁。其他会话可以读取行,也可以继续给行加共享锁,但是在当前事务提交之前其他会话不能修改加了共享锁的行。如果这些行中的任何一个被尚未提交的另一个事务更改,则当前查询将等待直到该事务结束,然后使用最新值。

  • SELECT … FOR UPDATE

    用排他锁锁定行和任何关联的索引条目,就像在这些行上执行UPDATE语句一样。禁止其他事务在这些加了锁的行上进行UPDATE、执行SELECT ... LOCK IN SHARE MODE或者读取某些事务隔离级别的数据。

通过对比,发现FOR UPDATE的加锁方式类似并发编程里的写锁,而LOCK IN SHARE MODE则是读锁,同一时间点相同的行上只允许出现一个写锁,或者是多个读锁。一旦有一种锁在数据行上成功加上了锁,另外一种加锁尝试就会进入等待。

Read More