python 分布式进程通信

简介: task_master.txttask_worker.txt 点击(此处)折叠或打开 #!/usr/bin/env python3 #-*- coding:utf-8 -*- ...
img_e25d4fb2f8de1caf41a735ec53088516.pngtask_master.txt
img_e25d4fb2f8de1caf41a735ec53088516.pngtask_worker.txt

点击(此处)折叠或打开

  1. #!/usr/bin/env python3
  2. #-*- coding:utf-8 -*-
  3. '''
  4. '''
  5. import time,random,queue
  6. from multiprocessing.managers import BaseManager

  7. task_queue = queue.Queue()
  8. result_queue = queue.Queue()

  9. class QueueManager(BaseManager):
  10.     pass

  11. QueueManager.register('get_task_queue', callable=lambda: task_queue)
  12. QueueManager.register('get_result_queue', callable=lambda: result_queue)

  13. manager = QueueManager(address=('', 5000), authkey=b'talen')
  14. manager.start()
  15. task = manager.get_task_queue()
  16. result = manager.get_result_queue()
  17. for i in range(10):
  18.     n = random.randint(0,9000)
  19.     print('Put task %d' % n)
  20.     task.put(n)
  21. for i in range(10):
  22.     r=result.get(timeout=10)
  23.     print("Result : %s " % r)
  24. manager.shutdown()

  25. print('master exit.')


点击(此处)折叠或打开

  1. #!/usr/bin/env python3
  2. #-*- coding:utf-8 -*-
  3. '''
  4. '''


  5. import time, queue, sys
  6. from multiprocessing.managers import BaseManager
  7. class QueueManger(BaseManager):
  8.     pass
  9. QueueManger.register('get_task_queue')
  10. QueueManger.register('get_result_queue')
  11. server_addr='127.0.0.1'
  12. print('Connect to server %s '% server_addr)
  13. m=QueueManger(address=(server_addr,5000), authkey=b'talen')
  14. m.connect()
  15. task=m.get_task_queue()
  16. result=m.get_result_queue()
  17. for i in range(10):
  18.     try:
  19.         n=task.get(timeout=1)
  20.         print('run task %d * %d ...' %(n,n))
  21.         r='%d * %d = %d' % (n,n,n*n)
  22.         time.sleep(1)
  23.         result.put(r)
  24.     except Queue.Empty:
  25.         print('task queue is empty')
  26. print('worker exit.')
t@localhost untitled$ python3 task_master.py 
Put task 6811
Put task 5164
Put task 8492
Put task 177
Put task 5496
Put task 8724
Put task 6422
Put task 2887
Put task 287
Put task 876
Result : 6811 * 6811 = 46389721 
Result : 5164 * 5164 = 26666896 
Result : 8492 * 8492 = 72114064 
Result : 177 * 177 = 31329 
Result : 5496 * 5496 = 30206016 
Result : 8724 * 8724 = 76108176 
Result : 6422 * 6422 = 41242084 
Result : 2887 * 2887 = 8334769 
Result : 287 * 287 = 82369 
Result : 876 * 876 = 767376 
master exit.
t@localhost untitled$ 
t@localhost untitled$ python3 task_worker.py 
Connect to server 127.0.0.1 
run task 6811 * 6811 ...
run task 5164 * 5164 ...
run task 8492 * 8492 ...
run task 177 * 177 ...
run task 5496 * 5496 ...
run task 8724 * 8724 ...
run task 6422 * 6422 ...
run task 2887 * 2887 ...
run task 287 * 287 ...
run task 876 * 876 ...
worker exit.
t@localhost untitled$ 




参考学习:http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431929340191970154d52b9d484b88a7b343708fcc60000#0
目录
相关文章
|
26天前
|
并行计算 数据处理 调度
Python中的并发编程:探索多线程与多进程的奥秘####
本文深入探讨了Python中并发编程的两种主要方式——多线程与多进程,通过对比分析它们的工作原理、适用场景及性能差异,揭示了在不同应用需求下如何合理选择并发模型。文章首先简述了并发编程的基本概念,随后详细阐述了Python中多线程与多进程的实现机制,包括GIL(全局解释器锁)对多线程的影响以及多进程的独立内存空间特性。最后,通过实例演示了如何在Python项目中有效利用多线程和多进程提升程序性能。 ####
|
1月前
|
存储 Unix Linux
进程间通信方式-----管道通信
【10月更文挑战第29天】管道通信是一种重要的进程间通信机制,它为进程间的数据传输和同步提供了一种简单有效的方法。通过合理地使用管道通信,可以实现不同进程之间的协作,提高系统的整体性能和效率。
|
1月前
|
消息中间件 存储 供应链
进程间通信方式-----消息队列通信
【10月更文挑战第29天】消息队列通信是一种强大而灵活的进程间通信机制,它通过异步通信、解耦和缓冲等特性,为分布式系统和多进程应用提供了高效的通信方式。在实际应用中,需要根据具体的需求和场景,合理地选择和使用消息队列,以充分发挥其优势,同时注意其可能带来的复杂性和性能开销等问题。
|
14天前
|
机器学习/深度学习 人工智能 分布式计算
【AI系统】分布式通信与 NVLink
进入大模型时代后,AI的核心转向大模型发展,训练这类模型需克服大量GPU资源及长时间的需求。面对单个GPU内存限制,跨多个GPU的分布式训练成为必要,这涉及到分布式通信和NVLink技术的应用。分布式通信允许多个节点协作完成任务,而NVLink则是一种高速、低延迟的通信技术,用于连接GPU或GPU与其它设备,以实现高性能计算。随着大模型的参数、数据规模扩大及算力需求增长,分布式并行策略,如数据并行和模型并行,变得至关重要。这些策略通过将模型或数据分割在多个GPU上处理,提高了训练效率。此外,NVLink和NVSwitch技术的持续演进,为GPU间的高效通信提供了更强的支持,推动了大模型训练的快
31 0
|
1月前
|
调度 iOS开发 MacOS
python多进程一文够了!!!
本文介绍了高效编程中的多任务原理及其在Python中的实现。主要内容包括多任务的概念、单核和多核CPU的多任务实现、并发与并行的区别、多任务的实现方式(多进程、多线程、协程等)。详细讲解了进程的概念、使用方法、全局变量在多个子进程中的共享问题、启动大量子进程的方法、进程间通信(队列、字典、列表共享)、生产者消费者模型的实现,以及一个实际案例——抓取斗图网站的图片。通过这些内容,读者可以深入理解多任务编程的原理和实践技巧。
65 1
|
20天前
|
监控 JavaScript 前端开发
python中的线程和进程(一文带你了解)
欢迎来到瑞雨溪的博客,这里是一位热爱JavaScript和Vue的大一学生分享技术心得的地方。如果你从我的文章中有所收获,欢迎关注我,我将持续更新更多优质内容,你的支持是我前进的动力!🎉🎉🎉
19 0
|
2月前
|
Python
Python中的多线程与多进程
本文将探讨Python中多线程和多进程的基本概念、使用场景以及实现方式。通过对比分析,我们将了解何时使用多线程或多进程更为合适,并提供一些实用的代码示例来帮助读者更好地理解这两种并发编程技术。
|
2月前
|
人工智能 文字识别 Java
SpringCloud+Python 混合微服务,如何打造AI分布式业务应用的技术底层?
尼恩,一位拥有20年架构经验的老架构师,通过其深厚的架构功力,成功指导了一位9年经验的网易工程师转型为大模型架构师,薪资逆涨50%,年薪近80W。尼恩的指导不仅帮助这位工程师在一年内成为大模型架构师,还让他管理起了10人团队,产品成功应用于多家大中型企业。尼恩因此决定编写《LLM大模型学习圣经》系列,帮助更多人掌握大模型架构,实现职业跃迁。该系列包括《从0到1吃透Transformer技术底座》、《从0到1精通RAG架构》等,旨在系统化、体系化地讲解大模型技术,助力读者实现“offer直提”。此外,尼恩还分享了多个技术圣经,如《NIO圣经》、《Docker圣经》等,帮助读者深入理解核心技术。
SpringCloud+Python 混合微服务,如何打造AI分布式业务应用的技术底层?
|
2月前
|
存储 Python
Python中的多进程通信实践指南
Python中的多进程通信实践指南
25 0