python 多进程和异步io的有机结合 Error in atexit._run_exitfuncs
import asyncio
import aiohttp
from concurrent.futures import ProcessPoolExecutor, as_completed ,ThreadPoolExecutor
import time async def post_http():
# 示例
url = ''
data = ''
async with aiohttp.ClientSession() as session:
async with session.post(url=url, data=data, headers={}, timeout=60) as resp:
r_json = await resp.json()
return r_json async def t_handler(data, t_flag, p_flag, semaphore):
async with semaphore:
for d in data:
print(f'pid:{p_flag} tid:{t_flag} data:{d}')
await asyncio.sleep(1) # 处理费时的io操作,比如httprequest
return def p_handler(datas, p_flag):
# 线程并发数需要有限制 linux打开文件最大默认为1024 win为509 待确认
ts = time.time()
num = 10 # 最大并发数
count = len(datas)
block = int(count / num) + 1
tar_datas = [datas[i * block: (i + 1) * block if (i + 1) * block < count else count] for i in range(num)]
semaphore = asyncio.Semaphore(num)
tasks = [t_handler(d, i, p_flag, semaphore) for i, d in enumerate(tar_datas)] loop = asyncio.get_event_loop() # 基于当前线程 ,故在多线程中无法使用 只能在多进程中使用
loop.run_until_complete(asyncio.wait(tasks))
loop.close() return f'\033[0;32mprocess {p_flag} :cost {time.time() - ts}\033[0m' if __name__ == '__main__':
ts = time.time()
datas = [i for i in range(1000)]
datas = [datas[i * 100:(i + 1) * 100] for i in range(10)] # 每个进程要处理的数据 # 启动异步io 主线程调用 event_loop 在当前线程下启动异步io 实现并发
# res = p_handler(datas,1)
# print(res) p_num = 10
block_len = 100 datas = [datas[i * 100:(i + 1) * 100] for i in range(p_num)] # 每个进程要处理的数据
# ProcessPoolExecutor 可能与运行环境有关 官方的 with as 会主动释放线程 导致主线程退出时找不到进程池内进程已经被释放 导致Error in atexit._run_exitfuncs异常
executor = ProcessPoolExecutor(p_num)
futures = [executor.submit(p_handler, d, p_flag) for p_flag, d in enumerate(datas)]
for f in as_completed(futures):
if f.done():
res = f.result()
print(res) print(f'Exit!! cost:{time.time() - ts}')
python 多进程和异步io的有机结合 Error in atexit._run_exitfuncs的更多相关文章
- [译]Python中的异步IO:一个完整的演练
原文:Async IO in Python: A Complete Walkthrough 原文作者: Brad Solomon 原文发布时间:2019年1月16日 翻译:Tacey Wong 翻译时 ...
- python之爬虫_并发(串行、多线程、多进程、异步IO)
并发 在编写爬虫时,性能的消耗主要在IO请求中,当单进程单线程模式下请求URL时必然会引起等待,从而使得请求整体变慢 import requests def fetch_async(url): res ...
- 使用Python实现多线程、多进程、异步IO的socket通信
多线程实现socket通信服务器端代码 import socket import threading class MyServer(object): def __init__(self): # 初始化 ...
- 【Python】【异步IO】
# [[异步IO]] # [协程] '''协程,又称微线程,纤程.英文名Coroutine. 协程的概念很早就提出来了,但直到最近几年才在某些语言(如Lua)中得到广泛应用. 子程序,或者称为函数,在 ...
- 爬虫之多线程 多进程 自定义异步IO框架
什么是进程? 进程是程序运行的实例,是系统进行资源分配和调度的一个独立单位,它包括独立的地址空间,资源以及1个或多个线程. 什么是线程? 线程可以看成是轻量级的进程,是CPU调度和分派的基本单位. 进 ...
- 多线程,多进程和异步IO
1.多线程网络IO请求: #!/usr/bin/python #coding:utf-8 from concurrent.futures import ThreadPoolExecutor impor ...
- python 并发编程 异步IO模型
异步IO(Asynchronous I/O) Linux下的asynchronous IO其实用得不多,从内核2.6版本才开始引入.先看一下它的流程: 用户进程发起read操作之后,立刻就可以开始去做 ...
- Python 并发总结,多线程,多进程,异步IO
1 测量函数运行时间 import time def profile(func): def wrapper(*args, **kwargs): import time start = time.tim ...
- Python 协程/异步IO/Select\Poll\Epoll异步IO与事件驱动
1 Gevent 协程 协程,又称微线程,纤程.英文名Coroutine.一句话说明什么是线程:协程是一种用户态的轻量级线程. 协程拥有自己的寄存器上下文和栈.协程调度切换时,将寄存器上下文和栈保存到 ...
- Python 事件驱动与异步IO
一.事件驱动编程是一种编程范式,这里程序的执行流由外部事件来决定.它的特点是包含一个事件循环,当外部事件发生时使用回调机制来出发相应的处理.另外两种常见的编程范式是(单线程)同步以及多线程编程. 1. ...
随机推荐
- 基于 VScode 搭建 Matlab 运行环境
插件 Matlab:代码高亮.语法检查.用户片段 matlab-formatter:代码格式化 Matlab Interactive Terminal:集成终端 配置 Matlab "fil ...
- angular使用_HttpClient或者Fetch发送POST/GET请求下载/上传文件
一:下载文件写法 1.post请求_HttpClient写法. myTest() { const params = { aa: "aa", bb: "bb" } ...
- 【Oculus Interaction SDK】(一)设置 VR 相机与控制器 && 实现简单的抓取功能
前言 前段时间 Oculus 的 SDK 频繁更新,很多已有的教程都不再适用于现在的版本了.本系列文章的主要目的是记录现版本常见功能的实现方法,便于自己后续开发.当然,不排除我文章刚写完 SDK 又变 ...
- .net core 阿里云接口之拷贝文件
紧接上文, 1).net core 阿里云接口之获取临时访问凭证_SunshineGGB的博客-CSDN博客 2).net core 阿里云接口之将指定的OSS文件下载到流_SunshineGGB的博 ...
- IOS12 + Xscode12 报错:Building for iOS Simulator, but linking in dylib built for iOS, file '/Users/XXX/Desktop/XXXX/XXX.framework/JSSDK' for architecture arm64
问题描述:编译过程出现错误,Building for iOS Simulator, but linking in dylib built for iOS, file '/Users/XXX/Deskt ...
- Vue前后端交互、生命周期、组件化开发
目录 Vue前后端交互.生命周期.组件化开发 一.Vue用axios与后端交互 二.Vue的生命周期 三.组件化开发 Vue前后端交互.生命周期.组件化开发 一.Vue用axios与后端交互 如果 ...
- golang拾遗:实现一个不可复制类型
这是golang拾遗系列的第六篇.这个系列主要用来记录一些平时不常见的知识点,偶尔也会实现些有意思的小功能,比如这篇. golang拾遗系列目录: golang拾遗:指针和接口 golang拾遗:为什 ...
- 大规模 IoT 边缘容器集群管理的几种架构-1-Rancher+K3s
前文回顾 大规模 IoT 边缘容器集群管理的几种架构-0-边缘容器及架构简介 ️Reference: IoT 边缘计算系列文章 Rancher + K3s 简介 Rancher: Kubernetes ...
- JZOJ 5353. 【NOIP2017提高A组模拟9.9】村通网
题目 为了加快社会主义现代化,建设新农村,农夫约(Farmer Jo)决定给农庄里每座建筑都连上互联网,方便未来随时随地网购农药. 他的农庄很大,有N 座建筑,但地理位置偏僻,网络信号很差. 一座建筑 ...
- Hexo系列(二):Hexo安装
作者:独笔孤行 官网: http://anyamaze.com 公众号:云实战 1.安装nodejs和npm yum install epel-release -y yum install ...