岳阳网站建设,链接地址,大学帮学校做网站,建筑网课平台1、 # coding : UTF-8 import threading, time # 导入相关模块 class Message: # 数据的描述类型 def __init__(self): # 构造方法 self.__title None # 初始化属性 self.__content None # 初始化属性 def set_info(self, title, content): # 进…1、 # coding : UTF-8 import threading, time # 导入相关模块 class Message: # 数据的描述类型 def __init__(self): # 构造方法 self.__title None # 初始化属性 self.__content None # 初始化属性 def set_info(self, title, content): # 进行属性内容的设置 self.__title title # 设置属性内容 time.sleep(1) # 进行操作的生产延迟 self.__content content # 设置属性内容 print(【%s】title %s、content %s % (threading.current_thread().name, self.__title, self.__content)) def __str__(self): # 获取数据将由消费者负责 time.sleep(0.8) # 消费者的延迟时间短 return 〖%s〗title %s、content %s % (threading.current_thread().name, self.__title, self.__content) def producer_handle(message): # 生产者处理函数 for num in range(50): # 生产50组数据 if num % 2 0 : # 交替生产 message.set_info(李兴华, 软件技术讲师) else: message.set_info(yootk, www.yootk.com) def consumer_handle(message): # 消费者处理函数 for num in range(50): print(message) # 获取50次的数据 def main(): # 主函数 message Message() # 公共保存的数据对象 producer_thread threading.Thread(targetproducer_handle, name生产者线程, args(message,)) consumer_thread threading.Thread(targetconsumer_handle, name消费者线程, args(message,)) producer_thread.start() # 启动线程 consumer_thread.start() # 启动线程 if __name__ __main__: # 判断程序执行名称 main() # 调用主函数
2、 # coding : UTF-8 import threading, time # 导入相关模块 class Message: # 数据的描述类型 def __init__(self, condition): # 构造方法 self.__title None # 初始化属性 self.__content None # 初始化属性 self.__condition condition # 获取同步锁 # flag True表示可以生产但是不能够消费 # flag False表示可以消费但是不能够生产 self.__flag True def set_info(self, title, content): # 进行属性内容的设置 self.__condition.acquire() # 获取同步锁 if self.__flag False: # 不能够继续生产了必须进行消费处理 self.__condition.wait() # 当前的线程进入到阻塞状态 # 如果现在可以生产则一定会执行如下的代码操作进行数据的设置同时修改flag标志此时的flag True self.__title title # 设置属性内容 time.sleep(1) # 进行操作的生产延迟 self.__content content # 设置属性内容 print(【%s】title %s、content %s % (threading.current_thread().name, self.__title, self.__content)) self.__flag False # 现在已经生产过了 self.__condition.notify() # 唤醒其他等待的线程 self.__condition.release() # 释放锁 def __str__(self): # 获取数据将由消费者负责 self.__condition.acquire() # 获取锁 if self.__flag True: # 不是消费状态 self.__condition.wait() # 等待生产者生产数据 # 如果执行了如下的代码则意味着不进行等待flag False try: time.sleep(0.8) # 消费者的延迟时间短 return 〖%s〗title %s、content %s % (threading.current_thread().name, self.__title, self.__content) finally: self.__flag True # 可以继续生产 无法消费了 self.__condition.notify() # 唤醒其他等待的线程 self.__condition.release() # 释放锁 def producer_handle(message): # 生产者处理函数 for num in range(50): # 生产50组数据 if num % 2 0 : # 交替生产 message.set_info(李, 软件技术讲师) else: message.set_info(yootk, www.com) def consumer_handle(message): # 消费者处理函数 for num in range(50): print(message) # 获取50次的数据 def main(): # 主函数 condition threading.Condition() # 实例化条件锁 message Message(condition) # 公共保存的数据对象 producer_thread threading.Thread(targetproducer_handle, name生产者线程, args(message,)) consumer_thread threading.Thread(targetconsumer_handle, name消费者线程, args(message,)) producer_thread.start() # 启动线程 consumer_thread.start() # 启动线程 if __name__ __main__: # 判断程序执行名称 main() # 调用主函数
3、
# coding : UTF-8 import threading, time, queue # 导入相关模块 class Message: # 数据的描述类型 def __init__(self): # 构造方法 self.__title None # 初始化属性 self.__content None # 初始化属性 def set_info(self, title, content): # 进行属性内容的设置 self.__title title # 设置属性内容 time.sleep(0.1) # 进行操作的生产延迟 self.__content content # 设置属性内容 print(【%s】title %s、content %s % (threading.current_thread().name, self.__title, self.__content)) def __str__(self): # 获取数据将由消费者负责 time.sleep(0.8) # 消费者的延迟时间短 return 〖%s〗title %s、content %s % (threading.current_thread().name, self.__title, self.__content) def producer_handle(worker_queue): # 生产者处理函数 for num in range(50): # 生产50组数据 message Message() # 定义生产数据的包装类型 if num % 2 0 : # 交替生产 message.set_info(李兴华, 软件技术讲师) else: message.set_info(ww, www.com) worker_queue.put(message) # 将生产后的数据放到队列之中 def consumer_handle(worker_queue): # 消费者处理函数 for num in range(50): print(worker_queue.get()) # 通过队列获取数据 def main(): # 主函数 worker_queue queue.Queue(5) # 定义一个5个大小的队列 producer_thread threading.Thread(targetproducer_handle, name生产者线程, args(worker_queue,)) consumer_thread threading.Thread(targetconsumer_handle, name消费者线程, args(worker_queue,)) producer_thread.start() # 启动线程 consumer_thread.start() # 启动线程 if __name__ __main__: # 判断程序执行名称 main() # 调用主函数