基于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在创建hashmap时正确使用泛型   java java编译器和模块   从每个ArrayList对象具有多个值的ArrayList写入文本文件(java)   java日程表每日报警管理器   显示客户端屏幕的java   尝试使用jpcap读取数据包时出现网络编程异常(java.lang.InstanceionException)   java如何为API测试创建JSESSIONID   ReportServer中的电子邮件SMTP配置和java错误。没有为PKCS#12密钥库提供密码   java如何最小化UDP数据包丢失   使用自定义hibernate类型时出现java ehcache错误?   java异步servlet,我们为什么需要它   java元数据项错误   security Java安全地存储代码中使用所需的用户帐户详细信息   替换文件中包含的文件名,并使用java将文件重命名为新名称   java Lucene按国家排序   java casting Integer>Object和更高版本的Object>Integer   java如何从电子表格行项将准备好的语句循环到derby数据库   需要安卓 java中模型的值名称