协程配合线程

asyncio.run_coroutine_threadsafe

该方法的语法如下:

asyncio.run_coroutine_threadsafe(coro, loop)

其实在协程中也可以使用多线程,有时候我们需要在主线程中启动一个子线程去做别的任务,这个时候我们就要用到下面的方法了,先上一个流畅的Python中的代码。

import time

import asyncio

from threading import Thread

now = lambda: time.time()

def start_loop(loop):

asyncio.set_event_loop(loop)

loop.run_forever()

async def do_some_work(x):

print(f'Waiting {x}')

await asyncio.sleep(x)

print(f'Done after {x}s')

def more_work(x):

print(f'More work {x}')

time.sleep(x)

print('Finished more work {x}')

start = now()

# 主线程中创建一个 new_loop

new_loop = asyncio.get_event_loop()

# 创建子线程 在其中开启无限事件循环

t = Thread(target=start_loop, args=(new_loop,))

t.start()

print(f'TIME: {time.time() - start}')

# 在主线程中新注册协程对象

# 这样即可在子线程中进行事件循环的并发操作 同时主线程又不会被 block

# 一共执行的时间大概在 6 s 左右

asyncio.run_coroutine_threadsafe(do_some_work(6), new_loop)

asyncio.run_coroutine_threadsafe(do_some_work(4), new_loop)

上述的例子,主线程中创建一个new_loop,然后在另外的子线程中开启一个无限事件循环。主线程通过run_coroutine_threadsafe新注册协程对象。这样就能在子线程中进行事件循环的并发操作,同时主线程又不会被block。一共执行的时间大概在6s左右

python多线程协程配合使用_多线程配合协程相关推荐

  1. 主线程如何等待多线程完成 返回数据_多线程基础体系知识清单

    作者:Object 来源:https://juejin.im/user/5d53e1f6f265da03af19cae0/posts 前言 本文会介绍Java中多线程与并发的基础,适合初学者食用. 线 ...

  2. c++ 多线程 类成员函数_多线程(C++/Python)

    多线程(C++/Python) 本文包括一下内容: 通过C++11的标准库进行多线程编程,包括线程的创建/退出,线程管理,线程之间的通信和资源管理,以及最常见的互斥锁,另外对python下多线程的实现 ...

  3. python多线程加速for循环_多线程-如何在Python的循环中对操作进行多线程

    首先,在Python中,如果您的代码受CPU约束,那么多线程将无济于事,因为只有一个线程可以持有全局解释器锁,因此一次只能运行Python代码. 因此,您需要使用进程,而不是线程. 如果您的操作&qu ...

  4. python多线程爬虫数据顺序_多线程爬取小说时如何保证章节的顺序

    前言 爬取小说时,以每一个章节为一个线程进行爬取,如果不加以控制的话,保存的时候各个章节之间的顺序会乱掉. 当然,这里说的是一本小说保存为单个txt文件,如果以每个章节为一个txt文件,自然不会存在这 ...

  5. java多线程的底层实现_多线程的底层实现机制 - 欢迎来到古怪匹诺曹的开发世界 - OSCHINA - 中文开源技术交流社区...

    1.多线程的底层实现 (1)首先回答什么是线程 1个进程要想执行任务,必须得有线程.线程是进程的基本执行单元,一个进程(程序)的所有任务都在线程中执行 (2)什么是多线程 1个进程中可以开启多条线程, ...

  6. c# 多线程界面卡顿_多线程同步等候 导致主界面UI卡顿,求解~

    多线程同步等待 导致主界面UI卡顿,求解~~~ 描述如下,有N个用户,我执行如下操作逻辑, FOR第一个循环,开 N个线程执行登陆操作,执行完毕后 (线程同步后),执行拨号操作,由于我使用线程同步,导 ...

  7. java 多线程合并结果集_多线程计算数据,然后合并数据

    假设有一个计算量非常大的任务,使用单线程处理会花费很长时间才能处理完成,这时候可以考虑使用多线程分批计算数据,然后再汇总数据输出.在这里,使用了CyclicBarrier来实现.这个类的功能就是指定特 ...

  8. c语言多线程访问一个变量_多线程+高并发+操作系统+网络+基础+调优+源码等xmind图整理好了...

    前言 多线程并发问题,基本是面试必问的. 今年刚刚毕业准备找实习的同学或者经历过最近一段时间面试的朋友们,相应你们应该都有一个相同的问题被问到,那就是多线程与高并发 因为最近和腾讯.阿里包括字节和京东 ...

  9. java多线程必须掌握吗_多线程模式有什么作用(java多线程必须掌握的知识)

    什么叫多进程? 在预估中,过程是已经实行的计算机语言的一个案例.或是简易地说,运作程序流程也称之为过程. 多进程代表着"在单独计算机软件中具备2个或更好几个CPU. 比如,假如计算机软件具备 ...

最新文章

  1. elasticsearch数据长期保存的方案
  2. armax函数 matlab 源码_将可读性不强的MATLAB公式样式转为直观的LaTeX样式
  3. 四种常见的MapReduce设计模式
  4. (微信小程序)二 : 创建一个页面
  5. 一个OSPF的区域备份在手册里看到的
  6. 诡异的json包含bom头
  7. (转)Linux中的screen命令使用
  8. 机器学习、数据科学、深度学习、可视化常用方法速查手册总结分享
  9. 啦啦外卖独立版41.7全开源小程序app全套源码带vue源码
  10. 交换机的基本交换配置
  11. 如何复制PDF文件中的文本和图片?
  12. verilog 3段式状态机
  13. 前淘宝工程师谈12306:做它比做淘宝难
  14. 夜深了,最好喝点咖啡
  15. c语言和java哪个好学_学java前要学C语言吗?java和C语言哪个好学?
  16. 网络学习 2g 3g 4g 技术对比 带宽理解 三大运营商手机网络模式 (制式)
  17. cy7c68013 usb 开发经验
  18. 技术提升了,钱自然就来了:盘点这段时间我挣钱的感受
  19. 计算机网络社团章程,社团日常规章制度
  20. window10设置文件的默认打开方式

热门文章

  1. python二维平面上依次得到(0,0)距离相等的点(x,y)坐标,并打印距离
  2. Intellij IDEA 安装jnetpcap开发环境与 no jnetpcap in java.library.path 的解决方案
  3. sourcetree 卡顿_哈曼卡顿Harman Kardon音响开奖!
  4. CSS——可视化格式模型
  5. 关于本次课堂代码的练习
  6. 安卓系统为何这么容易被黑客入侵
  7. 【IDE】我的花里胡哨VS
  8. svn 验证位置失败 Authorization failed
  9. swift版的StringAttribute
  10. 计划和跟踪工具 XPlanner