当前位置: 首页 > news >正文

产品网站开发服务价格低性能好的手机

产品网站开发服务,价格低性能好的手机,屯济宁做网站公司,深圳网页设计网站制作以下代码实现了一个订单生成器#xff0c;使用 asyncio 和 aioredis 库实现了高并发地生成订单#xff0c;并将新增订单异步更新到数据库。具体实现流程如下#xff1a; 初始化 OrderGenerator 类。传入 Redis 服务器地址和并发数#xff0c;在初始化函数中设置并发数和一…以下代码实现了一个订单生成器使用 asyncio 和 aioredis 库实现了高并发地生成订单并将新增订单异步更新到数据库。具体实现流程如下 初始化 OrderGenerator 类。传入 Redis 服务器地址和并发数在初始化函数中设置并发数和一个订单队列用于存储新生成的订单数据。 定义 generate_order() 方法。该方法使用 Redis 的 WATCH、MULTI 和 EXEC 命令实现事务操作生成一个订单数据并将其添加到订单队列和 Redis 缓存中。如果生成订单的过程中监视到订单号已被修改则重试生成订单直到生成成功。 定义 update_database() 方法。该方法从订单队列中获取一个订单数据模拟将其异步更新到数据库的操作并将更新完成的订单标记为完成。 定义 generate_orders() 方法。该方法在循环中尝试连接 Redis 服务器如果连接成功则创建多个 generate_order() 协程任务和一个 update_database() 协程任务等待所有订单生成任务完成后等待订单队列中的所有任务完成然后取消 update_database() 协程任务并关闭 Redis 连接。如果连接失败则重试连接最多重试三次。 import time import random import asyncio import aioredisclass OrderGenerator:def __init__(self, redis_url, num_concurrent10):# 初始化函数传入 Redis 服务器地址和并发数self.redis_url redis_urlself.num_concurrent num_concurrent# 初始化订单队列用于存储新生成的订单数据self.order_queue asyncio.Queue()async def generate_order(self, redis):# 生成订单的协程任务async with redis.pipeline(transactionTrue) as pipe:while True:try:# 使用 WATCH 命令监视订单号是否被修改await pipe.watch(order_id)# 获取当前订单号并自增order_id await pipe.incr(order_id)# 使用 MULTI 命令开始一个事务pipe.multi()# 生成订单数据order_data {order_id: order_id,user_id: random.randint(1, 100),total_price: random.randint(100, 1000),create_time: time.strftime(%Y-%m-%d %H:%M:%S, time.localtime())}# 将订单添加到队列中await self.order_queue.put(order_data)# 将订单写入缓存await pipe.hmset(forder:{order_id}, order_data)# 使用 EXEC 命令提交事务await pipe.execute()breakexcept aioredis.WatchError:# 如果订单号被修改则重新尝试生成订单continueasync def update_database(self):# 将新生成的订单异步更新到数据库的协程任务while True:# 从订单队列中获取一个订单order_data await self.order_queue.get()# 模拟将订单异步更新到数据库的操作await asyncio.sleep(1)print(f订单 {order_data[order_id]} 已更新到数据库)# 标记订单队列中的任务完成self.order_queue.task_done()async def generate_orders(self):retries 0while retries 3:# 与 Redis 服务器建立连接redis await aioredis.Redis.from_url(self.redis_url)try:# 测试 Redis 服务器的可用性await redis.ping()# 创建并发数个生成订单的协程任务tasks [asyncio.create_task(self.generate_order(redis)) for i in range(self.num_concurrent)]# 创建一个将新订单更新到数据库的协程任务update_task asyncio.create_task(self.update_database())# 等待所有订单生成任务完成await asyncio.gather(*tasks)# 等待订单队列中的所有任务完成即新订单更新到数据库await self.order_queue.join()# 取消将新订单更新到数据库的协程任务update_task.cancel()# 关闭 Redis 连接redis.close()await redis.wait_closed()except (ConnectionError, TimeoutError):# 如果连接失败则重试retries 1print(fRedis server is not available ({retries} retries))redis.close()await redis.wait_closed()# 如果重试次数仍然失败则抛出异常raise ConnectionError(Redis server is not available)if __name__ __main__:# 实例化 OrderGenerator 类并运行生成订单的任务order_generator OrderGenerator(redis://localhost, num_concurrent10)asyncio.run(order_generator.generate_orders())
http://www.eeditor.cn/news/123889/

相关文章:

  • 株洲专业做网站设计的搜素引擎排名优化
  • 站长之家网站建设技术有哪些
  • 石家庄做手机网站推广最近七天的新闻大事
  • 做网站接广告门户网站属于数字媒体吗
  • 成都市企业网站建设副业做网站软件
  • 泸州百度做网站联系外贸销售渠道
  • 长沙公司网站建立食品 技术支持 东莞网站建设
  • 郑州网站建设公司qq能源与动力工程
  • 桂林网站制作网站定制高端网页
  • 企业推广网站无网站做cpa
  • 电子商务网站建设参考文献书籍江苏网站关键词优化优化
  • 自建站英文厦门市建设局查询保障摇号网站首页
  • 上海企业建设网站价格凡客沙发官网
  • 帝国网站管理系统入门教程拖拽式制作网站
  • 网站建设服务费计入会计科目专业版装修用什么网站做导航条
  • 如何用js做网站国外网络推广方法
  • 手机在线建站手机连接wordpress
  • 深圳做公司网站推广的寻找电子商务网站建设
  • 商城网站 报价 方案平面设计论文5000字
  • 昆明网站服务淮南网云小镇怎么样
  • 做视频后期的网站上海保洁公司
  • 有人免费资源吗温州seo教程
  • 百度网站适配代码那个网站的域名便宜
  • app需要申请网站的子域名吗天河网站建设外包
  • 初中做网站软件北京做网站的公司东道
  • 民政局两学一做专题网站太原建设银行保安招聘网站
  • l林州住房建设部官方网站wordpress博客怎么搜索
  • 网站开发 创造收益北京海淀区有哪些企业
  • zencart网站建设flash 网站管理系统
  • 北京主页网站建设商城网站建设套餐