手机
当前位置:查字典教程网 >脚本专栏 >python >Python简单进程锁代码实例
Python简单进程锁代码实例
摘要:先说说线程在多线程中,为了保证共享资源的正确性,我们常常会用到线程同步技术.将一些敏感操作变成原子操作,保证同一时刻多个线程中只有一个线程在...

先说说线程

在多线程中,为了保证共享资源的正确性,我们常常会用到线程同步技术.

将一些敏感操作变成原子操作,保证同一时刻多个线程中只有一个线程在执行这个原子操作。

我最常用的是互斥锁,也称独占锁。其次还有读写锁,信号量,条件变量等。

除此之外,我们在进程间通信时会用到信号,向某一个进程发送信号,该进程中设置信号处理函数,然后当该进程收到信号时,执行某些操作。

其实在线程中,也可以接受信号,利用这种机制,我们也可以用来实现线程同步。更多信息见 http://www.jb51.net/article/64977.htm

再说说进程

进程里我们通过一些进程间通信方式,可以实现进程间的同步。

最近我遇到的一个情况是,某采集系统进程池中很多进程会向同一个日志文件中打印日志,如果通过进程间通信实现,比较麻烦。

还有一种办法,如果采用共享内存的方式,不同的进程分别将日志消息通过共享内存放入一个线程安全的队列中,再建立一个进程负责专门打印日志,这样也可以保证不被大乱,

保证日志的正确性,但代码量也很多阿。

还有一种办法,在共享内存中设置一个互斥锁,所有进程共享。

如果能像线程一样,有一个简单的互斥锁,用的时候只要加锁,就能实现进程间的互斥就好了。之前对文件加锁,也有些印象,于是我用它实现了一个进程间的互斥锁

#coding=utf-8 """ Process mutex lock. Actually it is implemented by file lock. """ import fcntl class ProcessLock(object): __lockfd = None @staticmethod def lock(): ProcessLock.__lockfd = open(__file__, 'a+') fcntl.flock(ProcessLock.__lockfd, fcntl.LOCK_EX) @staticmethod def unlock(): fcntl.flock(ProcessLock.__lockfd, fcntl.LOCK_UN)

加锁 ProcessLock.lock()

释放 ProcessLock.unlock()

非常简单使用,有兴趣的朋友可以试一试。

【Python简单进程锁代码实例】相关文章:

Python设计模式之观察者模式实例

python基础教程之类class定义使用方法

python获取豆瓣电影简介代码分享

python操作xml文件示例

python设置检查点简单实现代码

python基础教程之实现石头剪刀布游戏示例

python删除文件示例分享

python单链表实现代码实例

Python使用稀疏矩阵节省内存实例

python算法学习之计数排序实例

精品推荐
分类导航