Python 分布式进程
#-*-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 分布式进程的更多相关文章
- python 分布式进程体验
抽了点时间体验了一把python 分布式进程,有点像分布式计算的意思,不过我现在还没有这个需求,先把简单体验的脚本发出来,供路过的各位高手指教 注:需要先下载multiprocessing 的pyth ...
- python分布式进程(windows下)
分布式进程: 在Thread和Process中,应当优选Process,因为Process更稳定,而且,Process可以分布到多台机器上,而Thread最多只能分布到同一台机器的多个CPU上. Py ...
- python分布式进程
分布式进程指的是将Process进程分布到多台机器上,充分利用多态机器的性能完成复杂的任务 分布式进程在python 中依然要用到multiprocessing 模块.multiprocessing模 ...
- Python分布式进程报错:pickle模块不能序列化lambda函数
今天在学习到廖老师Python教程的分布式进程时,遇到了一个错误:_pickle.PicklingError: Can't pickle <function <lambda> at ...
- python 进程和线程-进程和线程的比较以及分布式进程
进程和线程的比较 参考链接:https://www.liaoxuefeng.com/wiki/1016959663602400/1017631469467456 我们介绍了多进程和多线程,这是实现多任 ...
- python多进程,进程池,数据共享,进程通信,分布式进程
一.操作系统中相关进程的知识 Unix/Linux操作系统提供了一个fork()系统调用,它非常特殊.普通的函数调用,调用一次,返回一次,但是fork()调用一次,返回两次,因为操作系统自动把当前 ...
- 【python】进程与线程
No1: 多进程 from multiprocessing import Process import os # 子进程要执行的代码 def run_proc(name): print('Run ch ...
- 【Python】进程和线程
多进程 多线程 ThreadLocal 进程vs线程 分布式进程 Top 学习廖老师的py官网的笔记 多任务的实现方式有三种方式: 1.多进程 2.多线程 3.多进程+多线程(这种比较复杂,实际很少采 ...
- Python分布式爬虫打造搜索引擎完整版-基于Scrapy、Redis、elasticsearch和django打造一个完整的搜索引擎网站
Python分布式爬虫打造搜索引擎 基于Scrapy.Redis.elasticsearch和django打造一个完整的搜索引擎网站 https://github.com/mtianyan/Artic ...
随机推荐
- 四、Object.defineProperty总结
Object.defineProperty() 参考:https://segmentfault.com/a/1190000007434923 定义: 方法会直接在一个对象上定义一个新属性,或者修改一个 ...
- Java 基本数据类型 及 == 与 equals 方法的区别
Java数据类型分为基本数据类型与引用数据类型. 1 基本数据类型 byte:Java中最小的数据类型,在内存中占1个字节(8 bit),取值范围-128~127,默认值0 short:短整型,2个字 ...
- PostgreSQL 安装了contrib 之后 登录失败的问题
1. 自己之前只是安装了 pg 10.6 2. 开发同事 需要用到 一个extensions 叫做 uuid-ossp 3. 执行报错 详情见昨天的blog 4. 然后执行了升级操作 结果 pg10 ...
- 重构客户注册-基于ActiveMQ实现短信验证码生产者
重构目标:将bos_fore项目中的CustomerAction作为短信消息生产者,将消息发给ActiveMQ,创建一个单独的SMS项目,作为短信息的消费者,从ActiveMQ获取短信消息,调用第三方 ...
- 6s ios9.0平台 微信小程序的fixed定位兼容性问题
如果不设置top和left的话 就会出现不显示问题
- 建议3---理解Python与C语言的不同之处
我们都知道,Python的底层是用C语言实现的,但切忌用C语言的思维和风格来编写Python代码.Python与其他语言有很多不同,以下来进行简单的分析: (1)"缩进"与“{}” ...
- python数学第四天【古典概型】
- vue 思維導圖
vue概念:vue是一個輕量級的javascript庫:是一種漸進式的框架:vue可以實現數據視圖雙向綁定. vue基礎語法:實例化.條件.循環 vue重頭戲:動畫.組件.過濾.ajax.自定義組件. ...
- layui 提交表格不验证
form.on('submit(filter_save)', function (data) { 后面查找发现是提交按钮要放在form里面
- Js--String、Date、Array对象
/* * String 对象 属性 length 方法 */ //String的length属性 var strL = "abcde"; document.write(" ...