【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱: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. 【转】1.4异步编程:轻量级线程同步基元对象

    开始<异步编程:同步基元对象(下)> 示例:异步编程:轻量级线程同步基元对象.rar 在<异步编程:线程同步基元对象>中我介绍了.NET4.0之前为我们提供的各种同步基元(包括 ...

  2. 【Window】线程同步方式1——临界区(关键代码段)

    第一节:[Window]创建线程的3种方式 第二节:[Window]线程同步概述 第三节:[Window]线程同步方式1--临界区(关键代码段) 第四节:[Window]线程同步方式2--互斥量 第五 ...

  3. 【记录】python多线程的使用 线程同步(LOCK和RLOCK) python与mysql数据库交互实现增加和查找 python的格式化输出

    文章目录 多线程: _thread模块 threading模块: 线程同步(LOCK和RLOCK) 和mysql交互: 附:python的格式化输出 附录 多线程: _thread模块 例一 impo ...

  4. Linux系统编程----16(线程同步,互斥量 mutex,互斥锁的相关函数,死锁,读写锁)

    同步概念 所谓同步,即同时起步,协调一致.不同的对象,对"同步"的理解方式略有不同.如,设备同步,是指在两 个设备之间规定一个共同的时间参考:数据库同步,是指让两个或多个数据库内容 ...

  5. c#.net多线程编程教学(3):线程同步

    随着对多线程学习的深入,你可能觉得需要了解一些有关线程共享资源的问题. .NET framework提供了很多的类和数据类型来控制对共享资源的访问. 考虑一种我们经常遇到的情况:有一些全局变量和共享的 ...

  6. 15、线程同步方式有哪些?优缺点?

    进程中线程同步的四种常用方式: 一. 临界区(CCriticalSection) 当多个线程访问一个独占性共享资源时,可以使用临界区对象.拥有临界区的线程可以访问被保护起来的资源或代码段,其他线程若想 ...

  7. Linux学习之系统编程篇:线程同步的引出和思想

    一.线程同步的引出 程序:父子线程交替数数 #include <stdio.h> #include <unistd.h> #include <string.h> # ...

  8. python编程(GUI线程和工作线程的同步)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 一般来说,编写gui客户端之外,都要编写几个work thread.因为如果只有一个gui th ...

  9. socket编程和进程线程同步跟新

    博主认为如果这两个分开更新的话,博主不知道要更新多久,所以不如大胆一点,进程线程与socket网络编程一起更新,希望能快一点结束这里的故事从而开启更多新篇章.

最新文章

  1. Java并发编程 LockSupport源码分析
  2. 一周一论文(翻译)——[SIGMOD 2015] TIMELY RTT-based Congestion Control for the Datacenter
  3. jvm 设置 直接内存 大小
  4. 572. 另一个树的子树
  5. [react] 除了实例的属性可以获取Context外哪些地方还能直接获取Context呢?
  6. gtb分类器参数调节_集成学习
  7. Linux(CentOS6.5)下编译安装Nginx1.10.1
  8. 【JAVA SE】第七章 继承和多态
  9. 偶然发现的Unity3d,两点之间的距离计算。
  10. 产品研发过程管理专题——编写软件测试计划需要考虑的几个问题
  11. HashSet和HashMap的区别 1
  12. Srm32 dwm1000 tdoa定位源码
  13. 阿里云移动测试平台使用教程
  14. 无任何格外需求的命令行C++飞机大战,内含BOSS,动画,千行代码免费奉上
  15. 支持生僻字且自动识别utf-8编码的php汉字转拼音类,支持生僻字且自动识别utf-8编码的php汉字转拼音类_PHP教程...
  16. UE4_地图程序化随机生成
  17. 讯飞智能办公本Air,迈向高效办公的新利器
  18. 电子电气架构车载网关系列——网关主要应用场景及相关要求
  19. java胶囊咖啡机_雀巢Piccolo XS小星星胶囊咖啡机详细介绍
  20. 收到索尼4亿美元豪华大礼包 B站离百亿美元目标更进一步?

热门文章

  1. JavaScript 原型总结三 函数和对象的关系
  2. Android测试之Monkey
  3. 【个性化阅读】ZapTxt的提醒姗姗来迟
  4. Hive过滤脏数据的一些经验
  5. 表单的管理作业及答案
  6. Nginx设置上传文件大小限制
  7. C#/VB.NET与西门子PLC进行ModbusTcp通信
  8. 数组的去重-----------------------来自大牛的讲解
  9. checkboxlist详细用法、checkboxlist用法、checkboxlist
  10. Eclipse 调试器