python编程(改进的线程同步方式)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
在实际代码开发中,gui的代码并不好写。因为不管是mvc、还是mvp都有一定的局限性。那么,这个时候,我就在想,是不是可以用mvp+reactor的方法进行gui的改进操作呢?首先app编写好界面代码之后,就等着外界的条件出发。比如说,等到键盘响应后,此时回调函数就收集到控件数据后发送给reactor,这个时候不需要等返回结果就结束了。如果reactor处理后好,这个时候,模块就给gui发送消息,gui收到消息后,从reactor请求数据,这个请求是阻塞的,可以利用生产者和消费者的方式解决。当然,因为生产者可能很多,生产者还是要用lock保护起来的,消费者就不用锁保护了。
如下就是改进后的线程同步代码,
#!/usr/bin/pythonimport os
import sys
import re
import threading
import signal
import timeg_exit = 0
flag = 0
val = 0
mutex = threading.Lock()
sem = threading.Semaphore(0)def sig_process(sig, frame):global g_exitsem.release()g_exit = 1def produce():cnt = 0global flagglobal valwhile not g_exit:mutex.acquire()if 0 == flag:passelse:cnt += 1val = cntflag = 0print 'feed'sem.release()mutex.release()def consume():global flagwhile not g_exit:flag = 1print 'send'sem.acquire()print valtime.sleep(1)def main():signal.signal(signal.SIGINT, sig_process)td1 = threading.Thread(target = produce)td1.start()td2 = threading.Thread(target = consume)td2.start()while not g_exit:time.sleep(5)td2.join()td1.join()if __name__ == '__main__':main()
大家可以直接在机器上尝试运行一下,看看结果和期待的是否一样:-)
python编程(改进的线程同步方式)相关推荐
- 【转】1.4异步编程:轻量级线程同步基元对象
开始<异步编程:同步基元对象(下)> 示例:异步编程:轻量级线程同步基元对象.rar 在<异步编程:线程同步基元对象>中我介绍了.NET4.0之前为我们提供的各种同步基元(包括 ...
- 【Window】线程同步方式1——临界区(关键代码段)
第一节:[Window]创建线程的3种方式 第二节:[Window]线程同步概述 第三节:[Window]线程同步方式1--临界区(关键代码段) 第四节:[Window]线程同步方式2--互斥量 第五 ...
- 【记录】python多线程的使用 线程同步(LOCK和RLOCK) python与mysql数据库交互实现增加和查找 python的格式化输出
文章目录 多线程: _thread模块 threading模块: 线程同步(LOCK和RLOCK) 和mysql交互: 附:python的格式化输出 附录 多线程: _thread模块 例一 impo ...
- Linux系统编程----16(线程同步,互斥量 mutex,互斥锁的相关函数,死锁,读写锁)
同步概念 所谓同步,即同时起步,协调一致.不同的对象,对"同步"的理解方式略有不同.如,设备同步,是指在两 个设备之间规定一个共同的时间参考:数据库同步,是指让两个或多个数据库内容 ...
- c#.net多线程编程教学(3):线程同步
随着对多线程学习的深入,你可能觉得需要了解一些有关线程共享资源的问题. .NET framework提供了很多的类和数据类型来控制对共享资源的访问. 考虑一种我们经常遇到的情况:有一些全局变量和共享的 ...
- 15、线程同步方式有哪些?优缺点?
进程中线程同步的四种常用方式: 一. 临界区(CCriticalSection) 当多个线程访问一个独占性共享资源时,可以使用临界区对象.拥有临界区的线程可以访问被保护起来的资源或代码段,其他线程若想 ...
- Linux学习之系统编程篇:线程同步的引出和思想
一.线程同步的引出 程序:父子线程交替数数 #include <stdio.h> #include <unistd.h> #include <string.h> # ...
- python编程(GUI线程和工作线程的同步)
[ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 一般来说,编写gui客户端之外,都要编写几个work thread.因为如果只有一个gui th ...
- socket编程和进程线程同步跟新
博主认为如果这两个分开更新的话,博主不知道要更新多久,所以不如大胆一点,进程线程与socket网络编程一起更新,希望能快一点结束这里的故事从而开启更多新篇章.
最新文章
- Java并发编程 LockSupport源码分析
- 一周一论文(翻译)——[SIGMOD 2015] TIMELY RTT-based Congestion Control for the Datacenter
- jvm 设置 直接内存 大小
- 572. 另一个树的子树
- [react] 除了实例的属性可以获取Context外哪些地方还能直接获取Context呢?
- gtb分类器参数调节_集成学习
- Linux(CentOS6.5)下编译安装Nginx1.10.1
- 【JAVA SE】第七章 继承和多态
- 偶然发现的Unity3d,两点之间的距离计算。
- 产品研发过程管理专题——编写软件测试计划需要考虑的几个问题
- HashSet和HashMap的区别 1
- Srm32 dwm1000 tdoa定位源码
- 阿里云移动测试平台使用教程
- 无任何格外需求的命令行C++飞机大战,内含BOSS,动画,千行代码免费奉上
- 支持生僻字且自动识别utf-8编码的php汉字转拼音类,支持生僻字且自动识别utf-8编码的php汉字转拼音类_PHP教程...
- UE4_地图程序化随机生成
- 讯飞智能办公本Air,迈向高效办公的新利器
- 电子电气架构车载网关系列——网关主要应用场景及相关要求
- java胶囊咖啡机_雀巢Piccolo XS小星星胶囊咖啡机详细介绍
- 收到索尼4亿美元豪华大礼包 B站离百亿美元目标更进一步?