首页 > 编程语言 >python编程(改进的线程同步方式)

python编程(改进的线程同步方式)

时间:2022-11-23 13:08:30浏览次数:39  
标签:__ global reactor python gui 编程 flag exit 线程



    在实际代码开发中,gui的代码并不好写。因为不管是mvc、还是mvp都有一定的局限性。那么,这个时候,我就在想,是不是可以用mvp+reactor的方法进行gui的改进操作呢?首先app编写好界面代码之后,就等着外界的条件出发。比如说,等到键盘响应后,此时回调函数就收集到控件数据后发送给reactor,这个时候不需要等返回结果就结束了。如果reactor处理后好,这个时候,模块就给gui发送消息,gui收到消息后,从reactor请求数据,这个请求是阻塞的,可以利用生产者和消费者的方式解决。当然,因为生产者可能很多,生产者还是要用lock保护起来的,消费者就不用锁保护了。


    如下就是改进后的线程同步代码,


#!/usr/bin/python

import os
import sys
import re
import threading
import signal
import time

g_exit = 0
flag = 0
val = 0
mutex = threading.Lock()
sem = threading.Semaphore(0)

def sig_process(sig, frame):
global g_exit
sem.release()
g_exit = 1

def produce():
cnt = 0
global flag
global val

while not g_exit:
mutex.acquire()
if 0 == flag:
pass
else:
cnt += 1
val = cnt
flag = 0
print 'feed'
sem.release()
mutex.release()

def consume():
global flag
while not g_exit:
flag = 1
print 'send'
sem.acquire()
print val
time.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()

    大家可以直接在机器上尝试运行一下,看看结果和期待的是否一样:-)





标签:__,global,reactor,python,gui,编程,flag,exit,线程
From: https://blog.51cto.com/feixiaoxing/5880995

相关文章

  • 多线程的那点儿事(之大结局)
      多线程一直是我比较喜欢的话题,当然也是很多朋友比较害怕的话题。喜欢它,因为它确实可以提高pc的使用效率;讨厌它,因为如果对它处理不好,反而会导致更大的麻烦。这里断断续......
  • 多线程的那点儿事(之多核编程)
      多核编程并不是最近才兴起的新鲜事物。早在intel发布双核cpu之前,多核编程已经在业内存在了,只不过那时候是多处理器编程而已。为了实现多核编程,人们开发实现了几种多......
  • python编程(orm原理和实践)
    就给出自己对orm的理解。之前廖雪峰给出的code,大家可以通过​​地址​​下载的到。1、orm的使用方法    一般我们使用orm都是这么写代码的,classUser(Model):id=I......
  • python编程(gevent入门)
        大家都知道python脚本执行的时候不是很快,特别是python下面的多线程机制,长久以来一直被大家所诟病。所以,很多同学都在思考python下面有没有什么方法可以让python执行......
  • python编程(巧用装饰器)
        以前没有用过装饰器,也不知道它有什么用。直到最近写了一个log函数,在直到原来python的装饰器可以这么方便。1、原来debug消息的写法    假设有一个process函数,......
  • python编程(类变量和实例变量)
        关于类变量和实例变量,一直不是很清楚。所以,想做几个实验,彻底解决这个问题。为此,我们设计了三个实验。1、直接引用类变量importosimportsysclassA():data=1......
  • python编程(python和c相互调用)
      通常为了扩展python的功能,我们需要将c库移植到python上面。python和c调用一般分成两种情况,一种是python调用c,这种情况最为普遍,也比较简单。另外一种就是c调用python,这......
  • 搜索引擎的那些事(多线程web遍历)
       上面一篇博客当中,我们可以利用单一的线程完成网页的下载。今天,我们打算在此基础上完成多线程的访问和加载操作。使用多线程,倒不是因为这项技术有多牛,主要是因为我们......
  • 21.1 动态TLS--《Windows核心编程》
    应用程序通过调用一组4个函数来使用动态TLS,这些函数实际上最经常为DLL所使用。通常情况下,如果DLL使用TLS,那么当它用DLL_PROCESS_ATTACH标志调用它的DllMain函数时......
  • 21.2 静态TLS--《Windows核心编程》
    部分笔记来自于:https://blog.csdn.net/Steven_programe_life/article/details/103358251?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baiduland......