尽管您不应该直接使用2682433407422022039041,但是您应该能够安全地将asyncio和aioprocessing结合在一起。 Event(以及任何其他基于事件循环的异步框架)的主要缺点是阻塞了事件循环。 如果您尝试直接使用2682433407422039039043,则无论何时阻塞等待子进程,都将阻塞事件循环。 显然,这很糟糕。

避免这种情况的最简单方法是使用2682433407422022039040执行2682433407422022039040中的函数。2682433407422039039040是使用2682433407422039039041实现的进程池,但是2682433407422039039042内置支持在其中执行功能而不会阻塞事件循环。 这是一个简单的例子:

import time

import asyncio

from concurrent.futures import ProcessPoolExecutor

def blocking_func(x):

time.sleep(x) # Pretend this is expensive calculations

return x * 5

@asyncio.coroutine

def main():

#pool = multiprocessing.Pool()

#out = pool.apply(blocking_func, args=(10,)) # This blocks the event loop.

executor = ProcessPoolExecutor()

out = yield from loop.run_in_executor(executor, blocking_func, 10) # This does not

print(out)

if __name__ == "__main__":

loop = asyncio.get_event_loop()

loop.run_until_complete(main())

对于大多数情况,仅此功能就足够了。 如果您发现自己需要来自2682433407422022039040的其他构造(如Queue、Event、Manager等),则有一个名为aioprocessing的第三方库(完整披露:我已经写过),该库提供所有2682433407422039039044兼容版本的2682433407422039039044数据结构。 。 这是一个演示示例:

import time

import asyncio

import aioprocessing

import multiprocessing

def func(queue, event, lock, items):

with lock:

event.set()

for item in items:

time.sleep(3)

queue.put(item+5)

queue.close()

@asyncio.coroutine

def example(queue, event, lock):

l = [1,2,3,4,5]

p = aioprocessing.AioProcess(target=func, args=(queue, event, lock, l))

p.start()

while True:

result = yield from queue.coro_get()

if result is None:

break

print("Got result {}".format(result))

yield from p.coro_join()

@asyncio.coroutine

def example2(queue, event, lock):

yield from event.coro_wait()

with (yield from lock):

yield from queue.coro_put(78)

yield from queue.coro_put(None) # Shut down the worker

if __name__ == "__main__":

loop = asyncio.get_event_loop()

queue = aioprocessing.AioQueue()

lock = aioprocessing.AioLock()

event = aioprocessing.AioEvent()

tasks = [

asyncio.async(example(queue, event, lock)),

asyncio.async(example2(queue, event, lock)),

]

loop.run_until_complete(asyncio.wait(tasks))

loop.close()

python asyncio 高并发_python-将asyncio与多处理结合起来会出现什么样的问题(如果有)?...相关推荐

  1. python模拟高并发_Python基于gevent实现高并发代码实例

    gevent是python的协程模块,协程可以理解成更轻量化的线程.因为性能测试工具的一些限制,就自己萌发了自己写性能测试工具的念想,当然,写的比较简单,比如缺少性能指标的收集,慢慢的优化 出来,这个 ...

  2. python异步高并发_python高并发异步服务器核心库forkcore使用方法

    1 拷贝下面的代码到一个文件,并命名为forkcore.py import os import threading import select import socket class ds_forkc ...

  3. python go高并发_天下武功为快不破,戏说Python与Go高并发争锋!

    在这个以斗气大陆横行的世界,每一个大的势力宗门都有自己的杀手锏的功法,比如老牌的古族有C++这样的巨无霸语言,药族有C语言,几乎斗气大陆所有的操作系统都是用C语言做的,毕竟斗气都要靠吃丹药维持.而实力 ...

  4. python解决高并发的方法

    python解决高并发的方法 参考文章: (1)python解决高并发的方法 (2)https://www.cnblogs.com/zjb19950716/p/9714307.html 备忘一下.

  5. python异步高并发_通过python异步通讯方式构建高并发压力测试工具

    背景说明 在工作中,要对一个接口进行压测,我当时就想通过python自己编写一个压力发生器. 初步方案(单线程循环发送) 通过循环向服务端发送请求,代码如下: #采用单步循环的方式循环测试 impor ...

  6. python flask高并发_标志处理高并发性,Flask

    Flask处理高并发 1.通过设置app.run()的参数,来达到多线程的效果,具体参数: 1.threaded : 多线程支持,默认为False,即不开启多线程; app.run(threaded= ...

  7. python链家网高并发异步爬虫asyncio+aiohttp+aiomysql异步存入数据

    python链家网二手房异步IO爬虫,使用asyncio.aiohttp和aiomysql 很多小伙伴初学python时都会学习到爬虫,刚入门时会使用requests.urllib这些同步的库进行单线 ...

  8. asyncio 文件io高并发_python教程:使用 async 和 await 协程进行并发编程

    python 一直在进行并发编程的优化, 比较熟知的是使用 thread 模块多线程和 multiprocessing 多进程,后来慢慢引入基于 yield 关键字的协程. 而近几个版本,python ...

  9. 前端调用mysql异步_python链家网高并发异步爬虫asyncio+aiohttp+aiomysql异步存入数据...

    python链家网二手房异步IO爬虫,使用asyncio.aiohttp和aiomysql 很多小伙伴初学python时都会学习到爬虫,刚入门时会使用requests.urllib这些同步的库进行单线 ...

最新文章

  1. TF-IDF 原理及sklearn中的tf-idf实例分析
  2. Java类和对象的初始化顺序
  3. 【洛谷 1991】 无线通讯网
  4. 环境测试明日最后一天 16万次公交车确保市民出行
  5. 搭建基础架构-ResultMsg
  6. linux网络编程之广播详细代码及文档说明 -,Linux网络编程之广播
  7. 从下往上飞入的动画效果
  8. python乒乓球比赛规则介绍_乒乓球的比赛规则介绍
  9. modemcu 打包_nodemcu固件的烧录及lua开发
  10. 【零基础学Java】—Collections集合工具类(四十二)
  11. (2)通过输入参数(测量数据)构建三维体模型(01)
  12. 互联网下一个热点:服务业电子商务
  13. 心法利器[57] | 文本多分类问题经验
  14. oracle的sql字符串转义,sql – 在Oracle数据库中搜索带转义的字符串
  15. 【Python 代码】类似SADPTool工具,搜索海康设备
  16. C++用cmath求平方根和次方
  17. 【微分方程数值解】常微分方程(一)欧拉方法和改进欧拉方法(附python算例,封装类)
  18. 知乎上神回复,看完神清气爽
  19. 在TCP端口筛选只允
  20. python3中join和格式化的用法 ##16

热门文章

  1. VI中的多行删除与复制
  2. debian安装及使用mysql
  3. 设置View的四个角为圆角
  4. 树莓派 libcurl安装
  5. CWinApp的应用与理解
  6. 大数据_Flink_数据处理_资源的分配和并行度测试---Flink工作笔记0013
  7. C++_数据类型_算术运算符_取模运算_递增递减运算_赋值运算符_比较运算符---C++语言工作笔记014
  8. 持续集成部署Jenkins工作笔记0009---创建SVN版本库并提交Maven工程
  9. VB.NET工作笔记009---硬件设备写码工具编写_使用串口通信_发送AT指令
  10. VB.NET工作笔记008---vs2017创建使用WCF服务_并调用服务demo