multiprocessing多进程计算及与rabbitmq消息通讯实践




import pika
import time
import json
from multiprocessing import Process, Queue
 
# 定义一个多进程任务
def long_running_process(queue):
    # 假设这是一个耗时的计算任务
    result = do_some_long_running_computation()
    queue.put(result)  # 将结果放入进程间通信的队列中
 
# 定义一个计算任务,模拟耗时计算
def do_some_long_running_computation():
    return "任务处理结果"
 
# 定义一个回调函数,用于处理RabbitMQ发送的消息
def callback(ch, method, properties, body):
    # 将接收到的消息转换为字典
    message = json.loads(body)
    # 创建一个进程并传入消息数据
    p = Process(target=long_running_process, args=(Queue(),))
    p.start()
    
    # 处理其他业务逻辑...
    # 假设这里是将计算结果发送回RabbitMQ
    p.join()  # 等待进程完成
    response = p.get()  # 从队列中获取结果
    ch.basic_publish(exchange='',
                     routing_key=method.reply_to,  # 应答队列名称
                     properties=pika.BasicProperties(correlation_id = \
                                                     method.correlation_id),
                     body=json.dumps(response))  # 发送处理结果
    ch.basic_ack(delivery_tag=method.delivery_tag)  # 发送确认消息
 
# 连接到RabbitMQ服务器
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
 
# 定义一个队列用于接收RPC响应
result = Queue()
 
# 定义一个RabbitMQ RPC服务器
channel.basic_consume(callback, queue='rpc_queue')
 
print(" [x] Awaiting RPC requests")
channel.start_consuming()

这个代码实例展示了如何使用multiprocessing库来创建多进程任务,以及如何使用RabbitMQ进行进程间通信和异步任务处理。在long_running_process函数中,我们模拟了一个耗时的计算任务,并将结果通过进程间队列传递给了回调函数。在回调函数中,我们创建了一个新的进程来处理任务,并将结果发送回客户端。这种模式可以有效提高系统的处理能力和响应速度。

评论已关闭

推荐阅读

Vue中使用mind-map实现在线思维导图
2024年08月04日
VUE
Web前端最全Vue实现免密登录跳转的方式_vue怎么样不登录返回首页,最强技术实现
2024年08月04日
VUE
vue3 项目搭建教程(基于create-vue,vite,Vite + Vue)
2024年08月04日
VUE
Vue-颜色选择器实现方案——>Vue-Color( 实战*1+ Demo*7)
2024年08月04日
VUE
Vue项目卡顿慢加载?这些优化技巧告诉你!_vue数据多渲染卡顿
2024年08月04日
VUE
vue中的keep-alive详解与应用场景
2024年08月04日
VUE
Vue、React实现excel导出功能(三种实现方式保姆级讲解)
2024年08月04日
vue-office/docx插件实现docx文件预览
2024年08月04日
VUE
java调用js文件的两种方法(支持V8引擎)
2024年08月04日
JavaScript:解决计算精度问题/mathjs/bignumber.js/big.js/decimal.js
2024年08月04日
两周从爬虫小白变大神 _yjs_js_security_passport
2024年08月04日
JS笔记(对象、函数、数组)
2024年08月04日
Markdown.js:强大的纯JavaScript Markdown解析器
2024年08月04日
Vue项目:js模拟点击a标签下载文件并重命名,URL文件地址下载方法、请求接口下载文件方法总结。
2024年08月04日
vue 父组件怎么获取子组件里面的data数据
2024年08月04日
VUE
个人开发实现AI套壳网站快速搭建(Vue+elementUI+SpringBoot)
2024年08月04日
el-table 表格封装并改造实现单元格可编辑
2024年08月04日
none
nodejs环境下创建vue项目、SSH密钥登陆!!!
2024年08月04日
vue+quill+element-ui实现视频、图片上传及缩放保姆级教程,轻松使用富文本
2024年08月04日
【three.js】22. Imported Models导入模型
2024年08月04日