有个需求,一个线程在得到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 线程异步执行踩坑相关推荐

  1. java 线程 交给spring_浅谈Java中spring 线程异步执行

    多线程并发处理起来通常比较麻烦,如果你使用spring容器来管理业务bean,事情就好办了多了.spring封装了Java的多线程的实现,你只需要关注于并发事物的流程以及一些并发负载量等特性,具体来说 ...

  2. python execute异步执行_封装了一个对mysql进行异步IO的小工具

    作者(微信公众号):猿人学Python SanicDB 是为 Python的异步 Web 框架 Sanic 方便操作MySQL而开发的工具,是对 aiomysql.Pool 的轻量级封装.Sanic ...

  3. druid配置:回收线程remove-abandoned使用踩坑

    本次踩坑springboot版本2.1.1 druid版本1.1.9 先讲下此次踩坑是怎么回事 项目本身为多数据源项目,第二数据源连接了一个只读db,因为该db从库需要进行迁移,所以让这边暂时先连接一 ...

  4. 菜鸟在 windows 下 python 中安装 jupyter 踩坑要点 、被神化的 VsCode

    我平时用不到 python ,更没用过 jupyter ,因此我的 python知识仅限于知道有 python 这么个编程语言,会写个 print("Hello World!!!" ...

  5. python转写java踩坑记录

    数组如何初始化 String[] words = new String[]{"1", "2"}; 列表如何由单个对象初始化 Arrays.asList(obj) ...

  6. Python 酷q,踩坑粗记,用慕晓飞大神的sdk

    一.安装,此处坑在文档中都有,需要注意的是vs_redit用x86的,文档上的地址我没有试,直接用2008-2019的64位就没成功,安上32位的2017就可以加载dll和json这些文件了 二.当时 ...

  7. python sphinx_Python Sphinx使用踩坑记录

    描述 使用 pip 安装sphinx后,按照教程建立了一个新的py文件,如下 # run.py def run(name): """ this is how we run ...

  8. python访问hive数据库踩坑指南

    最近做数据ETL系统的更新,需要将原有ETL任务迁移到新的系统中,并验证数据的准确性. 目录 安装依赖包 核心代码 遇到的坑 依赖包版本 安装依赖包 因为本人电脑是win本,所以只能使用impyla连 ...

  9. Python机器学习核PCA踩坑(numpy库与math库)

    only size-1 arrays can be converted to Python scalars 今天学习用Python来实现核PCA,大概是书已经过时的原因(其实就是这个原因).在求核矩阵 ...

最新文章

  1. Linux下查看显示器输出状态以及修改显示器工作模式(复制 or 扩展)
  2. 在ASP.NET中备份和还原数据库
  3. 用深度学习模型,解构并重构人类思维
  4. vue中的倒计时跳转页面问题和axios网络请求this作用域问题
  5. Struts2 - Check Login Interceptor
  6. mysql性能优化-慢查询分析、优化索引和配置
  7. Java Review - 并发编程_Unsafe
  8. varnish的服务配置(实验说明)
  9. Swoole安装popen()找不到
  10. 操作系统服务:time时间模块+datetime模块
  11. 电脑软件:推荐一款本地文档搜索神器,赶快下载试试吧!
  12. Primer Premier 6.0 for Win 专业的引物设计
  13. jsoup 网页抓取简介详解
  14. windows10电脑发现不了网络计算机,Win10电脑无法开启网络发现怎么解决?
  15. mac快捷键修改跟windows一样_如何把Windows按键改成苹果按键
  16. Unity内置Shader解读1——Bumped Diffuse
  17. 谷歌的AI布局:机器学习是重心 继续在中国招人
  18. 为什么企业微信只能群发一次?如何增加群发次数?
  19. 构建SaaS化平台产品的建议
  20. 农业银行网上银行服务器未响应,农业银行k宝没反应原因分析及解决方法

热门文章

  1. Burpsuite爆破含CSRF-Token的程序
  2. mysql中逗号前的字符串_MySql逗号拼接字符串查询的两种方法
  3. java $p_javap -c命令详解
  4. jquery表单属性筛选元素
  5. 前端html,css基础总结
  6. poj2032Square Carpets(IDA* + dancing links)
  7. 浏览器的同源策略与跨域
  8. C# 如何跨平台调用C++的函数指针!
  9. 2018秋季C语言学习总结
  10. TMS320DM642学习----第一篇(硬件连接)