python 线程异步执行踩坑
有个需求,一个线程在得到n个数据之后,异步地执行一个子线程函数,在子线程函数中完成数据库的打开、写入数据、关闭操作。在子线程函数返回前父线程先返回结果。
在此之前,先导入我们需要的模块:
from concurrent.futures import ThreadPoolExecutor
import timeexecutor = ThreadPoolExecutor()
version1
百度了一下,参考这篇文章:python线程实现异步任务
这个代码的执行结果如下:
def update_mysql(id):executor.submit(do_update)return "ok" + str(id)def do_update():time.sleep(3)print('start update')time.sleep(1)print("end")returnprint(update_mysql(1))
print(update_mysql(2))
print(update_mysql(3))
ok1
ok2
ok3
start update
start update
start update
end
end
end
version2
但是这个子线程函数是没有添加参数的,如果我这样写:
def update_mysql(id):executor.submit(do_update(id))return "ok" + str(id)def do_update(id):time.sleep(3)print('start update' + str(id))time.sleep(1)print("end"+ str(id))returnprint(update_mysql(1))
print(update_mysql(2))
print(update_mysql(3))
结果如下:
start update1
end1
ok1
start update2
end2
ok2
start update3
end3
ok3
又变成同步了。
version3
后续又参考了这篇文章:python 之线程池传入多个参数的方法 ThreadPoolExecutor.submit 多参数支持
from concurrent.futures import ThreadPoolExecutor
import timeexecutor = ThreadPoolExecutor()#调用方法
#实质就是通过lambda表达式过渡。传入的参数是一个,但是通过lambda表达多后拆散为多个传入。这是很巧妙的方法,实际 就是 *p 这个表达式。def update_mysql(id):args =[id,id,id]executor.submit(lambda p: doFileParse(*p),args)return "ok" + str(id)def doFileParse(filepath,segment,wordslist):time.sleep(3)print(filepath)time.sleep(1)print(segment)returnprint(update_mysql(1))
print(update_mysql(2))
print(update_mysql(3))
结果如下:
ok1
ok2
ok3
2
1
3
2
1
3
很显然变成了异步执行了,但是却不能保证按照开启顺序执行,但是由于我的子线程不需要保证顺序执行,所以接下来也就不需要探究了。有解决方案的可以告知我一波。
python 线程异步执行踩坑相关推荐
- java 线程 交给spring_浅谈Java中spring 线程异步执行
多线程并发处理起来通常比较麻烦,如果你使用spring容器来管理业务bean,事情就好办了多了.spring封装了Java的多线程的实现,你只需要关注于并发事物的流程以及一些并发负载量等特性,具体来说 ...
- python execute异步执行_封装了一个对mysql进行异步IO的小工具
作者(微信公众号):猿人学Python SanicDB 是为 Python的异步 Web 框架 Sanic 方便操作MySQL而开发的工具,是对 aiomysql.Pool 的轻量级封装.Sanic ...
- druid配置:回收线程remove-abandoned使用踩坑
本次踩坑springboot版本2.1.1 druid版本1.1.9 先讲下此次踩坑是怎么回事 项目本身为多数据源项目,第二数据源连接了一个只读db,因为该db从库需要进行迁移,所以让这边暂时先连接一 ...
- 菜鸟在 windows 下 python 中安装 jupyter 踩坑要点 、被神化的 VsCode
我平时用不到 python ,更没用过 jupyter ,因此我的 python知识仅限于知道有 python 这么个编程语言,会写个 print("Hello World!!!" ...
- python转写java踩坑记录
数组如何初始化 String[] words = new String[]{"1", "2"}; 列表如何由单个对象初始化 Arrays.asList(obj) ...
- Python 酷q,踩坑粗记,用慕晓飞大神的sdk
一.安装,此处坑在文档中都有,需要注意的是vs_redit用x86的,文档上的地址我没有试,直接用2008-2019的64位就没成功,安上32位的2017就可以加载dll和json这些文件了 二.当时 ...
- python sphinx_Python Sphinx使用踩坑记录
描述 使用 pip 安装sphinx后,按照教程建立了一个新的py文件,如下 # run.py def run(name): """ this is how we run ...
- python访问hive数据库踩坑指南
最近做数据ETL系统的更新,需要将原有ETL任务迁移到新的系统中,并验证数据的准确性. 目录 安装依赖包 核心代码 遇到的坑 依赖包版本 安装依赖包 因为本人电脑是win本,所以只能使用impyla连 ...
- Python机器学习核PCA踩坑(numpy库与math库)
only size-1 arrays can be converted to Python scalars 今天学习用Python来实现核PCA,大概是书已经过时的原因(其实就是这个原因).在求核矩阵 ...
最新文章
- Linux下查看显示器输出状态以及修改显示器工作模式(复制 or 扩展)
- 在ASP.NET中备份和还原数据库
- 用深度学习模型,解构并重构人类思维
- vue中的倒计时跳转页面问题和axios网络请求this作用域问题
- Struts2 - Check Login Interceptor
- mysql性能优化-慢查询分析、优化索引和配置
- Java Review - 并发编程_Unsafe
- varnish的服务配置(实验说明)
- Swoole安装popen()找不到
- 操作系统服务:time时间模块+datetime模块
- 电脑软件:推荐一款本地文档搜索神器,赶快下载试试吧!
- Primer Premier 6.0 for Win 专业的引物设计
- jsoup 网页抓取简介详解
- windows10电脑发现不了网络计算机,Win10电脑无法开启网络发现怎么解决?
- mac快捷键修改跟windows一样_如何把Windows按键改成苹果按键
- Unity内置Shader解读1——Bumped Diffuse
- 谷歌的AI布局:机器学习是重心 继续在中国招人
- 为什么企业微信只能群发一次?如何增加群发次数?
- 构建SaaS化平台产品的建议
- 农业银行网上银行服务器未响应,农业银行k宝没反应原因分析及解决方法