#-*-coding:utf-8-*-
'''分布式进程指的是将Process进程分不到多台机器上,充分利用多台机器的性能完成复杂的任务'''
#服务器端
#---------------------------------------Linux版----------------------------------------------
# import random,time,Queue
# from multiprocessing.managers import BaseManager
# #一、建立task_queue和result_queue用来存放任务和结果
# task_queue=Queue.Queue()
# result_queue=Queue.Queue()
# class Queuemanger(BaseManager):
# pass
# #二、把创建的两个队列注册在网络上,利用reister方法,clallble参数关联了Queue对象,将Queue对象在网络中暴露
# Queuemanger.register('get_task_queue',callable=lambda:task_queue)
# Queuemanger.register('get_result_queue',callable=lambda:result_queue)
# #三、绑定端口8001,设置端口口令;admin,相当于对象的初始化
# manager=Queuemanger(address=('',8001),authkey='admin')
# #四、启动管理监听信息通道
# manager.start()
# #五、通过管理实例的方法获得通过网络访问的Queue对象
# task=manager.get_task_queue()
# result=manager.get_result_queue()
# #六、添加任务
# for url in ["ImageUrl_"+str(i) for i in range(10)]:
# print("put task %s..."%url)
# task.put(url)
# #获取返回结果
# print("try get result...")
# for i in range(10):
# print("result is %s"%result.get(timeout=10))
# #关闭管理
# manager.shutdown()
#--------------------------------------------------Windows版-----------------------------------
#taskManager for Windows
import Queue
from multiprocessing.managers import BaseManager
from multiprocessing import freeze_support
#任务个数
task_number=20
#定义收发队列
task_queue=Queue.Queue(task_number)
result_queue=Queue.Queue(task_number)
def get_task():
return task_queue
def get_result():
return task_queue()
#创建类似的QueueManager
class QueueManager(BaseManager):
pass
def win_run():
#windows下绑定调用接口不能使用lambda所以只能先定义函数再绑定
QueueManager.register('get_task_queue',callable=get_task)
QueueManager.register('get_result_queue',callable=get_result)
#绑定端口并设置验证口令,Windows下需要填写IP地址,linux下不填写默认使用本地IP地址
manager=QueueManager(address=('127.0.0.1',8001),authkey='admin')
#启动
manager.start()
try:
#通过网络获取任务队列和结果队列
task=manager.get_task_queue()
result=manager.get_result_queue()
#添加任务
for url in["ImageUrl_"+str(i) for i in range(10)]:
print('put task %s... '%url)
task.put(url)
print('try get result...')
for i in range(10):
print('result is %s '%result.get(timeout=10))
except Exception as e:
print('Manager error:%s'%e)
finally:
#不论程序执行成功或是失败finally都会执行,即一定要将管道关闭,否则汇报错误
manager.shutdown()
if __name__=="__name__":
#windows下多进程可能会有问题,添加以下代码可以缓解
freeze_support()
win_run()

#客户端

#-*-coding:utf-8-*-

#任务进程TaskWorker.py
import time
from multiprocessing.managers import BaseManager
#创建类似的QueueManager:
class QueueManager(BaseManager):
pass
#一、使用QueueManger注册用于获取Queue的方法名称
QueueManager.register('get_task_queue')
QueueManager.register('get_result_queue')
#二、链接到服务器
server_addr='127.0.0.1'
print('Connect to server %s...'%server_addr)
#端口和验证口令需要与服务器保持一致
m=QueueManager(address=(server_addr,8001),authkey='admin')
#从网络链接
m.connect()
#三、获取Queue的对象
task=m.get_task_queue()
result=m.get_result_queue()
#四、从 task队列获取任务,并把结果写入result
while(not task.empty()):
image_url=task.get(True,timeout=5)
print('run task download %s...'%image_url)
time.sleep(1)
result.put('%s--->sucess'%image_url)
print('worker exit.')

Python 分布式进程的更多相关文章

  1. python 分布式进程体验

    抽了点时间体验了一把python 分布式进程,有点像分布式计算的意思,不过我现在还没有这个需求,先把简单体验的脚本发出来,供路过的各位高手指教 注:需要先下载multiprocessing 的pyth ...

  2. python分布式进程(windows下)

    分布式进程: 在Thread和Process中,应当优选Process,因为Process更稳定,而且,Process可以分布到多台机器上,而Thread最多只能分布到同一台机器的多个CPU上. Py ...

  3. python分布式进程

    分布式进程指的是将Process进程分布到多台机器上,充分利用多态机器的性能完成复杂的任务 分布式进程在python 中依然要用到multiprocessing 模块.multiprocessing模 ...

  4. Python分布式进程报错:pickle模块不能序列化lambda函数

    今天在学习到廖老师Python教程的分布式进程时,遇到了一个错误:_pickle.PicklingError: Can't pickle <function <lambda> at ...

  5. python 进程和线程-进程和线程的比较以及分布式进程

    进程和线程的比较 参考链接:https://www.liaoxuefeng.com/wiki/1016959663602400/1017631469467456 我们介绍了多进程和多线程,这是实现多任 ...

  6. python多进程,进程池,数据共享,进程通信,分布式进程

    一.操作系统中相关进程的知识   Unix/Linux操作系统提供了一个fork()系统调用,它非常特殊.普通的函数调用,调用一次,返回一次,但是fork()调用一次,返回两次,因为操作系统自动把当前 ...

  7. 【python】进程与线程

    No1: 多进程 from multiprocessing import Process import os # 子进程要执行的代码 def run_proc(name): print('Run ch ...

  8. 【Python】进程和线程

    多进程 多线程 ThreadLocal 进程vs线程 分布式进程 Top 学习廖老师的py官网的笔记 多任务的实现方式有三种方式: 1.多进程 2.多线程 3.多进程+多线程(这种比较复杂,实际很少采 ...

  9. Python分布式爬虫打造搜索引擎完整版-基于Scrapy、Redis、elasticsearch和django打造一个完整的搜索引擎网站

    Python分布式爬虫打造搜索引擎 基于Scrapy.Redis.elasticsearch和django打造一个完整的搜索引擎网站 https://github.com/mtianyan/Artic ...

随机推荐

  1. a标签中的onclick和href的使用

    onclick和href 链接的 onclick 事件被先执行,其次是 href 属性下的动作(页面跳转,或 javascript 伪链接):  假设链接中同时存在 href 与 onclick,如果 ...

  2. java 工厂模式 转载

    下面介绍三种设计模式,简单工厂模式,工厂方法模式,抽象工厂模式 思考如下场景: 有一天,林同学准备去买笔记本,他到商城发现有两款电脑他特别喜欢, 一款是 Macbook Pro, 另一款是 Surfa ...

  3. maven eclipse 第3方包

    C:\Users\3510\.m2\repository\myjar install:install-file -Dfile=C:\Users\3510\.m2\repository\myjar\al ...

  4. php 生成订单号201807205598981

    php版 /** * 生成唯一订单号 */ public function build_order_no() { $no = date('Ymd').substr(implode(NULL, arra ...

  5. centos6.5安装配置NTP,集群各机器间时间同步

    试验环境 提君博客原创 >>提君博客原创  http://www.cnblogs.com/tijun/  << IP 主机名 角色 描述 同步方式 192.168.11.11 ...

  6. 定义一个内核panic问题

    出现问题时的反汇编为: /usr/src/debug/kernel-4.1.44-.aarch64/net/core/dev.c: 17800xffff800000860724 <__netif ...

  7. zabbix模板

    https://github.com/xm-y/zabbix-community-repos  https://monitoringartist.github.io/zabbix-searcher/ 

  8. 利用Python实现“指尖陀螺”,让你释放压力

    前言 利用Python实现“指尖陀螺”,让你释放压力 基本环境配置 版本:Python3 系统:Windows 相关模块:turtle 实现效果 不停点击键盘空格键,这个陀螺会慢慢加速,从而达到一个减 ...

  9. 老男孩python学习自修第九天【yield生成器】

    1.如果在一个方法中有yield关键字则该方法返回的是一个生成器对象 2.对生成器对象进行操作必须进行迭代或循环处理 例如: yield_test.py #!/usr/bin/env python # ...

  10. PCIE

    ---恢复内容开始--- 高速差分总线.串行总线 每一条PCIe链路中只能连接两个设备这两个设备互为是数据发送端和数据接收端.PCIe链路可以由多条Lane组成,目前PCIe链路×1.×2.×4.×8 ...