首页 > 代码库 > python 多线层协调应用举例
python 多线层协调应用举例
1. threading.Event 机制应用
2. threading.Lock 防止子线层打印出错
3. 再次遇到在python2.7中,中文字符串作为形参传递时出现的问题并解决。
# coding:utf-8 from __future__ import unicode_literals import threading import time # " 妈妈做饭,我弟吃,我刷碗 " # 用事件(Event)对象实现进程时间顺序上的调度 # python2.7 字符串作为实参传递时,似乎必须要用 utf-8 格式编码,为了跟python 3 尽量保持同步 # from __future__ import unicode_literals,即字符串常量默认为 unicode 编码, # 字符串之间进行运算时也要转换为同样的编码格式,所以utf-8格式参数要解码(decode) food_prepared = threading.Event() food_finished = threading.Event() finished = threading.Event() print_lock = threading.Lock() # 为了防止多个线程在控制台打印时出现冲突,对打印行为加锁 def safe_print(string): print_lock.acquire() print(string) print_lock.release() class bro (threading.Thread): def __init__(self, name): threading.Thread.__init__(self) self.name = name def finish_food(self): safe_print("弟弟吃完了") def run(self): if food_prepared.wait(20): safe_print("弟弟在吃饭") time.sleep(3) self.finish_food() food_finished.set() else: safe_print("弟弟等不及出去吃了") class mother(threading.Thread): def __init__(self, name): threading.Thread.__init__(self) self.name = name def run(self): safe_print(self.name.decode("utf-8") + "在做饭") time.sleep(5) food_prepared.set() class me(threading.Thread): def __init__(self, name): threading.Thread.__init__(self) self.name = name def do_dish(self): safe_print(self.name.decode("utf-8") + "在刷碗") time.sleep(3) safe_print("刷完了") def run(self): food_prepared.wait() safe_print(self.name.decode("utf-8") + "等着刷碗") food_finished.wait(20) safe_print("弟弟吃完了我来刷碗") self.do_dish() finished.set() a = me("我".encode("utf-8")) b = bro("弟弟".encode("utf-8")) c = mother("妈妈".encode("utf-8")) c.start() a.start() b.start() finished.wait() safe_print("结束")
python 多线层协调应用举例
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。