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 ...
随机推荐
- Azure系列2.1.3 —— BlobEncryptionPolicy
(小弟自学Azure,文中有不正确之处,请路过各位大神指正.) 网上azure的资料较少,尤其是API,全是英文的,中文资料更是少之又少.这次由于公司项目需要使用Azure,所以对Azure的一些学习 ...
- python 获取列表中次大的数值.
需求: 1.写个函数,把一组数字传到函数中,然后取出最大值和次大值. 2.不能使用排序函数. 分析: Q: list = [100,50,60,70,30,45] 怎么从这个列表中取出最大值? A: ...
- checkbox保存和赋值
//货物信息中的表格内容 $.each(trG.find('td input,td select'),function(i,inp){ if($(inp).attr('type')=='checkbo ...
- Ionic常用命令
安装ionic npm install -g ionic 更新www/lib/ionic 目录的文件,如有项目中有bower,此命令会运行bower update ionic, 否则则会从CDN上下载 ...
- cookie,localStorage和sessionStorage区别
三者的异同 特性 Cookie localStorage sessionStorage 数据的生命期 一般由服务器生成,可设置失效时间.如果在浏览器端生成Cookie,默认是关闭浏览器后失效 除非被清 ...
- 如何确定 Hadoop map和reduce的个数--map和reduce数量之间的关系是什么?
1.map和reduce的数量过多会导致什么情况?2.Reduce可以通过什么设置来增加任务个数?3.一个task的map数量由谁来决定?4.一个task的reduce数量由谁来决定? 一般情况下,在 ...
- hive JDBC客户端启动
JDBC客户端操作步骤
- linux的使用
第一 安装ubuntu操作系统 1. ubuntu下解决中英文输入法问题 问题: ubuntu在安装了搜狗输入法后无法切换英文,即使在搜狗输入法中设置了切换按键依然无反应, 原因在于当前系统中只有一个 ...
- Python——Flask框架——模板
一.渲染模板 render_template 函数把Jinja2模板引擎集成到程序中 二.Jinja2变量过滤器 过滤器名 说明 safe 渲染值是不转义 capitalize 把值得首字母转换成大写 ...
- 手机连接WiFi有感叹号x怎么回事?如何消除手机WiFi感叹号?
经过多年的革新,现在的安卓系统已经非常优秀了,某些程度已经超越iOS,卡顿和耗电也不再是安卓系统的代名词了.而为了体验到最优秀的安卓系统,不少人都会购买海外的手机,因为海外手机的安卓系统都比较精简,非 ...