基于redis的生产者-顾客模型
woodenwaiter的Python项目详细描述
基于redis的python producer客户模型
分期付款
使用pip:
pip安装woodenwaiter
源代码:
python3 setup.py安装
运行示例
python3-m woodenwaiter.woodenwaiter
示例用法
一个简单的程序,演示如何使用woodenwaiter 作为客户和生产商
客户示例:
importtimefromwoodenwaiter.woodenwaiterimportWoodenWaiterfromwoodenwaiter.woodenwaiterimportWoodenCustomerfromwoodenwaiter.woodenwaiterimportWoodenManagerif__name__=='__main__':table1='cmdb'table2='rbac'dish1='custom_sync'dish2='some_task'waiter=WoodenWaiter()defprint_foods(foods):print('custom foods')print('foods is: {}'.format(foods))customer1=WoodenCustomer(table=table1,dish=dish1,waiter=waiter,process=print_foods,seconds=1)customer2=WoodenCustomer(table=table2,dish=dish2,waiter=waiter,process=print_foods,seconds=3)manager=WoodenManager()manager.add_customer(customer1)manager.add_customer(customer2)manager.launch()whileTrue:time.sleep(1)
制作人示例:
importtimeimportrandomfromwoodenwaiter.woodenwaiterimportWoodenMenufromwoodenwaiter.woodenwaiterimportWoodenWaiterfromwoodenwaiter.woodenwaiterimportWoodenCookerif__name__=='__main__':table1='cmdb'table2='rbac'dish1='custom_sync'dish2='some_task'foods1={"action":"sync_custom_data","paras":""}foods2={"action":"some_action","paras":{"para1":"value1","para2":"value2"}}menu1=WoodenMenu(table=table1,dish=dish1,foods=foods1)menu2=WoodenMenu(table=table2,dish=dish2,foods=foods2)waiter=WoodenWaiter()cooker1=WoodenCooker(menu=menu1,waiter=waiter)cooker2=WoodenCooker(menu=menu2,waiter=waiter)cooker_running=Truedefcook_sometime():whilecooker_running:seconds=random.randint(3,10)time.sleep(seconds)print('cookone after {} seconds'.format(seconds))cooker1.cookone()cooker2.cookone()cooker_thread=threading.Thread(target=cook_sometime)cooker_thread.start()whileTrue:try:time.sleep(1)exceptKeyboardInterrupt:cooker_running=Falsemanager.terminate_all()break
课程介绍
woodenwaiter的互学类
伍登韦德
每个woodenwater连接oneredis数据库。我们使用Woodenwaiter创建 woodencooker实例和woodencustomer实例。
伍登沃特从伍登科克那里拿菜(把任务推到redis列表上)然后上菜 发送给WoodEncustomer(来自Redis的pop任务)。
伍登科克
创建一个WoodEnocker需要一个Woodenmenu和一个WoodenWater。
方法:
设置菜单(自,菜单)-设置Woodenmenu
设置服务员(自助,服务员)-设置WoodenWaiter
Cookone(self,menu=none)-将任务推送到redis
木材客户
WoodenCustomer采用四个参数:
- 表:可能是您的程序模型
- 迪什:也许你的一种任务
- 侍者:一个woodenwaiter实例
- 进程:接受字典参数的函数。这个函数将是 当侍者端上一盘菜时(当从redis弹出一个任务时)打电话。
- 秒:服务员检查redis的秒数。
WoodEncustomer来自Threading.Thread。但你自己动手 不建议。请使用woodenmanager instand。
方法:
打电话给服务员(自行)-打电话给服务员检查食物是否正常(如果在redis中有任务的话)
呼叫服务员循环(自我,秒)-呼叫服务员循环
温和地终止(自停止)客户线程
伍德经理
WoodenManager用于WoodenCustomer的集中管理。我们增加了木材客户 实例,然后启动线程
方法:
add_customer(self,customer)-添加woodencustomer实例
启动(自)-启动所有WoodEncustomer线程
terminate_all(self)-温和地停止所有客户线程