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

py并发编程实践-demo

需求

已知条件:appX -请求-> api  

多进程实现并发请求api

  • 给定app应用列表,请求api核数
from datetime import datetime, timedelta
from multiprocessing import Processclass ProcessTest(object):"""多进程并发请求API,并批量写入django表要点:1)并发;2)读写批量原则,批量读、批量写需求:已知1000个app,通过api获取其CPU核数思路:将app列表 按并发数 分段"""def __init__(self, mon_day):self.mon_day = mon_day@staticmethoddef requests_mon_api(app_id):import randomreturn {app_id: random.randint(100, 5000)}@staticmethoddef get_app_list():import timetime.sleep(2)   # 耗时return ["app_"+str(i) for i in range(1000)]def records_to_db(self, records):# django table bulk create to dbprint("[{0}] -------->>>>>>>>>{1}".format(self.mon_day, records))def app_cores_to_db(self, app_id):# api 无限重试。。flag = 0while flag == 0:try:app_records = self.requests_mon_api(app_id)self.records_to_db(app_records)flag = 1except Exception as e:print(e.args, "retry", app_id)def batch_run(self, start, end, app_arr):batch_app = app_arr[start:end + 1]for app in batch_app:self.app_cores_to_db(app)def process_run(self, process_num, process_batch, app_arr):process_arr = []# from django import dbfor i in range(process_num):# db.close_old_connections()p = Process(target=self.batch_run, args=(i * process_batch, (i+1)*process_batch, app_arr))print("第{0}个进程,拉取范围[{1}:{2}],共拉取{3}条记录".format(i+1, i*process_batch, (i+1)*process_batch, process_batch))process_arr.append(p)for p in process_arr:p.start()for p in process_arr:p.join()def to_db(self):app_arr = self.get_app_list()process_num = 15total = len(app_arr)process_batch = total // process_numself.process_run(process_num=process_num, process_batch=process_batch, app_arr=app_arr)remain_index = process_batch * process_num + 1for app_id in app_arr[remain_index:]:try:self.app_cores_to_db(app_id)except Exception as e:print(e.args, app_id, "error")if __name__ == '__main__':day = (datetime.now() + timedelta(days=-0)).strftime("%Y-%m-%d")tp = ProcessTest(mon_day=day)tp.to_db()
http://www.lryc.cn/news/233475.html

相关文章:

  • 1-2 暴力破解-模拟
  • 机器学习中的Bagging思想
  • 基于PyTorch搭建你的生成对抗性网络
  • ROS话题(Topic)通信:自定义msg - 例程与讲解
  • 【Vue配置项】 computed计算属性 | watch侦听属性
  • linux 查看命令使用说明
  • ceph修复pg inconsistent( scrub errors)
  • 【论文精读】VOYAGER: An Open-Ended Embodied Agent with Large Language Models
  • Linux安装DMETL5与卸载
  • Office Word 中的宏
  • qt中d指针
  • 交易者最看重什么?anzo Capital这点最重要!
  • window 搭建 MQTT 服务器并使用
  • Prometheus+Ansible+Consul实现服务发现
  • 【原创】java+swing+mysql校园活动管理系统设计与实现
  • vscode中vue项目引入的组件的颜色没区分解决办法
  • uniapp: 实现pdf预览功能
  • 【Pytorch笔记】7.torch.nn (Convolution Layers)
  • MySQL内部组件与日志详解
  • 【LeetCode】94. 二叉树的中序遍历
  • IP-guard WebServer 命令执行漏洞复现
  • TensorFlow案例学习:图片风格迁移
  • 解密网络世界的秘密——Wireshark Mac/Win中文版网络抓包工具
  • 自学ansible笔记
  • 笔记53:torch.nn.rnn() 函数详解
  • 【Spring】使用三方包进行数据源对象(数据库)管理
  • EfficientNet:通过模型效率彻底改变深度学习
  • asp.net core mvc之 布局
  • 【QT HTTP】使用QtNetwork模块制作基于HTTP请求的C/S架构
  • R语言绘制精美图形 | 火山图 | 学习笔记