基于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的互学类

伍德菜单

每个伍登科厨师one根据one分类的食物woodenmenu 实例。我们通过提供一个表(可能是您的程序)来创建woodenmenu实例 模型),一道菜(可能是你的任务之一)和食物(一些信息 客户需要)

参数“foods”的建议格式:

foods={"action":"要执行的任务字符串","paras":{"para1":"value1","para2":"value2"}}

伍登韦德

每个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)-温和地停止所有客户线程

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java无法启动应用程序:JNLP错误   java根据用户输入在PreparedStatement中使用setTime()或setNull()   java EJB与同步   java以object为键通过hashmap进行搜索   java中的模10^9+7   针对包含其他对象的对象的java OOP最佳实践   如何将字符串作为HTML代码从Java文件读取到JSP页面?   java我的POM怎么了?“解析表达式..检测到递归表达式循环”   用于Hbase的Mapreduce的java NoSuchMethodError   JAVAlang.SecurityException:权限拒绝:启动意图{act=安卓.Intent.action.MAIN cat=[安卓.Intent.category.LAUNCHER]   数组初始化谜语Java   通过arraylist搜索时的java句柄关联