python停止线程?暂停?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python停止线程?暂停?相关的知识,希望对你有一定的参考价值。

参考技术A Python 通过threading.Event()产生一个event对象。event对象维护一个内部标志(标志初始值为False),通过set()将其置为True。wait(timeout)则用于堵塞线程直至Flag被set(或者超时,可选的),isSet()用于查询标志位是否为True,Clear()则用于清除标志位(使之为False)。

链接
raise exception 停止线程的方式还未实现???

Python3编程实战Tetris机器人(游戏暂停)

系列文章入口

《Python3编程实战Tetris机器人》

设计思路

游戏暂停功能比较简单,主要是控制gameRunningStatus变量的值与界面的控制统一起来,游戏暂停了,键盘的响应也要停止。另,gameRunningStatus变量的改变也不能直接操作,需生成一个暂停命令单元,送入队列中,由工作任务线程去处理。

具体实现

界面控制

开始按钮会在 “Start”、“Rause”和“Resume”之间切换。

def btnStartClicked(self):
    if self.game.getGameRunningStatus() == 0:      # 点击时游戏处于未开始状态
        self.btnStartVar.set("Pause")
        self.game.start()
    elif self.game.getGameRunningStatus() == 1:    # 点击时游戏处于游戏中
        self.btnStartVar.set("Resume")
        self.game.pause()
    elif self.game.getGameRunningStatus() == 5:    # 点击时游戏处于暂停状态
        self.btnStartVar.set("Pause")
        self.game.resume()
    self.gameCanvas.focus_set()                    # 设置游戏空间为当前活动控件

游戏结束时,恢复初始状态

self.app.setStartButtonText("Start")

暂停操作

def pause(self):
    opQueue.put(("pause",5))

恢复操作

游戏处于暂停中,所以直接修改变量值,没有设计命令单元了。

def resume(self):
    self.gameRunningStatus = 1     
    self.canvas.after(self.gameSpeedInterval * (0 if self.isAutoRunning else 1), self.tickoff)

每一个任务单元都是一个二元元组(方便数据解构),第一个是字符串,为命令;第二个是元组,是数据包(也按方便解构的方式去设计),由每个命令自行定义。

工作线程增加暂停处理

...
elif cmd == "pause":
    self.gameRunningStatus = data
...

键盘响应改造

def processKeyboardEvent(self, ke):
    if self.game.getGameRunningStatus() == 1 and self.game.isAutoRunning == 0:
        if ke.keysym == \'Left\':
            opQueue.put((\'Left\',()))
        ...

项目地址

https://gitee.com/zhoutk/ptetris
或
https://github.com/zhoutk/ptetris

运行方法

1. install python3, git
2. git clone https://gitee.com/zhoutk/ptetris (or download and unzip source code)
3. cd ptetris
4. python3 tetris

This project surpport windows, linux, macOs

on linux, you must install tkinter first, use this command:  
sudo apt install python3-tk

相关项目

已经实现了C++版,项目地址:

https://gitee.com/zhoutk/qtetris

以上是关于python停止线程?暂停?的主要内容,如果未能解决你的问题,请参考以下文章

线程的停止和暂停

线程的停止与暂停

Java 线程停止暂停和继续

如何正确暂停/停止线程?

如何让正在运行的线程暂停一段时间

Java多线程程序休眠暂停与停止