⑴ 如何在python中用ZeroMQ实现流行的Pub/Sub模式

建立了 VPS 虚拟服务器(windows server),然后安装了 python 和 zero mq。
写了一个简单的 pub/sub 程序, pub 端放在 VPS 这里。

⑵ Python学习资料下载链接

你好, 我是兔兔秃90,用网络网盘分享给你,点开就可以保存,链接永久有版效^_^链接: https://pan..com/s/1eDDezD8zAazb-s-eYkY6CA 提取权码: r5h1

⑶ 如何在Python中使用ZeroMQ和Docker构建微服务架构

当想让一个容器做两件事情,或者使一个Docker镜像包含来自两个不同镜像的依赖库时,就需要知道每个镜像的Dockerfile。本文介绍了如何通过docker history命令来对Docker镜像进行反向工程,得到它们的Dockerfile,并组织到一个Dockerfile里然后build,从而实现想做的事情。

常言道,“不要重复发明轮子!”

在使用Docker时,构建自己的镜像之前,最好在Docker Hub寻找一些可以直接使用的镜像做练习。把软件架构分布到一系列容器中,每一个容器只做一件事情,这样的效果非常好。构建分布式应用的最好的基石是使用来自Docker Hub的官方镜像,因为可以信任它们的质量。

在某些情况下,可能想让一个容器做两件不同的事情。而在另外一些情况下,可能想让一个Docker镜像包含来自两个不同镜像的依赖库。如果有每个镜像的Dockerfile,这是非常简单的。将它们组织到一个Dockerfile里然后build就行。

然而,大多数时间都在使用Docker Hub上准备好的镜像,不会有它们的源Dockerfile。我花时间找一个可以合并(或flatten)两个不同Docker镜像的工具,当然没有它们的Dockerfile。也就是说在找一个能做下面这件事的东西:
image 1 --
\
---> merged_image_12
/
image 2 --

此前在GitHub上有两个相关的讨论(1、2),尽管它们都被关闭了。

这可能吗?
那么,是否存在工具能够像这样做吗:docker merge image2 image2 merged_image?

没有!
你甚至不可以用下面的方式来构建Dockerfile:
FROM image1
FROM image2

简而言之,在一个Dockerfile里不能有多个基础镜像。

但是我需要这个功能!
唯一的解决办法是取得这些镜像的Dockerfile,然后把它们组织到一个文件中,再进行构建。那么,我能在Docker Hub上获得一个镜像的Dockerfile吗? 幸运的是可以。它不能离线获取(译注:原文是online,但显然online时对于来自GitHub的自动构建镜像是可以直接获取的),但是你可以使用docker history命令,通过反向工程获取。

怎么来使用?
在你的机器上使用docker pull从Docker Hub下载镜像。
docker pull image1
docker pull image2

然后使用docker history来取得构建这两个容器时运行的命令。
docker history --no-trunc=true image > image1-dockerfile
docker history --no-trunc=true image2 > image2-dockerfile

接下来打开这两个文件,你可以看到每个镜像的命令堆栈。这是因为Docker镜像通过层(阅读更多)的方式来构建。即你在Dockerfile中键入的每一个命令所构建的新镜像,都是在之前的命令产生的镜像之上。所以你可以对镜像进行逆向工程。

限制
不能对镜像进行反向工程的唯一场景,是镜像的维护者在他的Dockerfile中使用了ADD或COPY命令。你会看到这样一行:
ADD file:1ac56373f7983caf22
或 ADD dir:cf6fe659e9d21535844
这是因为不知道维护者在他自己的机器上,包括镜像里使用了什么本地文件。

⑷ 如何通过IP访问并运行服务器上的python文件

很多种方法,例如:

  1. rpc远程调用.通过ip地址,远程指定python文件,直接调用

  2. 写一个简单的socket,进行通信专,发送命令属,根据命令启动python文件

  3. 通过http协议,建立简单的web服务,通过http请求调用

  4. 通过消息队列,例如zmq,rabbitmq,amq,发送消息或者命令,由消费者调用python文件.


⑸ python代码 ImportError: No mole named zmq

zmq 模块没有安装啊

用pip install zmq命令装下

⑹ 用python写一个zmq的client和server

给你一个示例程序,你看了就知道怎么做了。

服务端:

#
#HelloWorldserverinPython
#BindsREPsockettotcp://*:5555
#Expects"Hello"fromclient,replieswith"World"
#
importzmq
importtime

context=zmq.Context()
socket=context.socket(zmq.REP)
socket.bind("tcp://*:5555")

whileTrue:
#Waitfornextrequestfromclient
message=socket.recv()
print"Receivedrequest:",message

#Dosome'work'
time.sleep(1)#Dosome'work'

#Sendreplybacktoclient
socket.send("World")

客户端:

#
#HelloWorldclientinPython
#ConnectsREQsockettotcp://localhost:5555
#Sends"Hello"toserver,expects"World"back
#
importzmq

context=zmq.Context()

#Sockettotalktoserver
print"Connectingtohelloworldserver..."
socket=context.socket(zmq.REQ)
socket.connect("tcp://localhost:5555")

#Do10requests,waitingeachtimeforaresponse
forrequestinrange(1,10):
print"Sendingrequest",request,"..."
socket.send("Hello")

#Getthereply.
message=socket.recv()
print"Receivedreply",request,"[",message,"]"

⑺ 如何在Python中使用ZeroMQ和Docker构建微服务架构

微服务是什么?

微服务是一种架构风格,它包括多个彼此间进行通信的独立进程。在设计上,这些进程具有高度的可扩展性、相互解耦而且一次只完成一个较小的任务。这些服务都拥有自己的资源以及通过网络实现彼此间通信的进程。

相比于靠后端的 单体结构
来封装所有服务器逻辑的传统客户端-服务器架构(C/S架构)而言,微服务架构的差异性体现在关注点分离(Separation of
concern)。这种设计模式更易于维护,使得灵活性、可扩展性及容错能力更强。但是这种分布式架构所的不足之处体现在如果设计不合理就会使得排错及维
护变得复杂。

一个简单微服务的例子

让我们来分析这样的一个场景:你正在使用微服务模式构建一个电子商务网店。

对于一个电商网店上的常见商品,好比说iPhone,其详情页会显示:

。产品的及基本信息

。你的购买历史

。哪些人买了iPhone也买了手机套

。与苹果手机相关的优惠和折扣

。店家的数据

。送货方式

。推荐商品等等

此外,这个简单的产品详情页的接口将有多个版本的来匹配web、移动端以及用于第三方应用程序的REST API。

在微服务模式中数据分布在多个服务之间。在这个例子中,服务包括:

。产品详情服务

。商家服务

。支付服务

。优惠及折扣服务

。库存服务

。定价服务

。回顾服务

。推荐服务

这些独立的服务是如何被访问的呢?

解决办法是使用一个API网管,它作为所有客户端的单一入口并且根据需求调用分布在整个基础架构中的特定微服务。以上模式的行业应用案例是NetFlix API网关,它具有支持不同设备的多个API客户端。你可以点击此处 了解更多 。

构建一个简单的微服务

目前有很多方法可以用于构建你的微服务。

在本文中我们将使用ZeroMQ来创建两个进程之间的通信。ZeroMQ提供了用于在套接字之上开发可扩展、分布式systed的构建块。它使用椭圆曲线密码体制(第四版)来实现安全性,并提供了即刻开启的 通讯模式 。

关于ZMQ,还有很多 优点 。MQ即是针对异步工作而设计的线程化消息队列。谈论太多zeroMQ的内容已经超出了本文的范畴,你可以阅读 使用zeromq 以及 zeromq用于分布式系统 。

我们要使用的另一个工具是 Docker 。本文假设读者对Docker已经有了基础的了解。

ZeroMQ有很多种通讯模式,为了开始我们的工作,让我们用ZeroMQ和Flask来配置一个简单的PUB-SUB。下图展示了组件之间的关系和数据流。

1&3 - 一个flask服务器运行在5000端口上而且其URL是 /downcase/ 。该URL用来接受(GET)请求,而所有格式为的请求将收到回应:答谢字符将会转换为小写字符并返回。

2 - 回应的消息也被发送给同一个容器中的ZMQ发布者(Publisher)

4,5 - ZMQ订阅者(subscriber)持续监听并将来自ZMQ服务器的消息保存到名为 subscriber.log 的文件中

创建服务器

首先看一下我们的Dockerfile

<pre><code>

FROM ubuntu:14.04

RUN apt-get update

RUN apt-get install -y --force-yes python python-dev python-setuptools software-properties-common gcc python-pip

RUN apt-get clean all

RUN pip install pyzmq

RUN pip install Flask

ADD zmqserver.py /tmp/zmqserver.py

Flask Port

EXPOSE 5000

Zmq Sub Server

EXPOSE 4444

CMD ["python","/tmp/zmqserver.py"]

</code></pre>

我们选择Ubuntu
14.04作为容器操作系统。我们安装了基本的软件包。通过pip,我们安装pyzmq(zeromq的Python绑定)同时也安装了Flask。接着
我们导出端口5000(flask服务器)和4444(发布者运行的端口)。此外,我们复制了包含所有flask及zeromq
pythond代码的脚本文件 zmqserver.py 并运行它。

现在我们来看一下zmqserver.py的内容:

server.py

import time

import zmq

HOST = '127.0.0.1'

PORT = '4444'

_context = zmq.Context()

_publisher = _context.socket(zmq.PUB)

url = 'tcp://{}:{}'.format(HOST, PORT)

def publish_message(message):

try:

_publisher.bind(url)

time.sleep(1)

_publisher.send(message)

except Exception as e:

print "error {}".format(e)

finally: _publisher.unbind(url)

from flask import Flask

from flask import request

app = Flask(__name__)

@app.route("/downcase/", methods=['GET'])

def lowerString():

_strn = request.args.get('param')

response = 'lower case of {} is {}'.format(_strn, _strn.lower()) publish_message(response)

return response

if __name__ == '__main__':

app.run(host='0.0.0.0', debug=False)

ZMQ发布者运行在4444端口上。我们创建了一个context并且声明了URL。我们运行了flask app,它通过URL /downcase/ 把GET获得的参数 Param 转换成小写字符,这就是服务的应答。应答的字符串是 published ,它作为一个消息把相同的字符串返回给浏览器

为了构建以上的Docker映像(image),我们执行以下的命令:
sudo docker build -t docker-zmq-pub

并且在该映像之上执行:
docker run --name docker-pub-server -p 5000:5000 -p 4444:4444 -t docker-zmq-pub

我们把容器中的端口5000和4444映射到这台主机上,于是无论客户端在哪里,它们都可以订阅这个发布者。

订阅者客户端

client.py

import zmq

import sys

import time

import logging

import os

HOST = '127.0.0.1'

PORT = '4444'

logging.basicConfig(filename='subscriber.log', level=logging.INFO)

class ZClient(object):

def __init__(self, host=HOST, port=PORT):

"""Initialize Worker"""

self.host = host

self.port = port

self._context = zmq.Context()

self._subscriber = self._context.socket(zmq.SUB)

print "Client Initiated"

def receive_message(self):

"""Start receiving messages"""

self._subscriber.connect('tcp://{}:{}'.format(self.host, self.port))

self._subscriber.setsockopt(zmq.SUBSCRIBE, b"")

while True:

print 'listening on tcp://{}:{}'.format(self.host, self.port)

message = self._subscriber.recv()

print message

logging.info(

'{} - {}'.format(message, time.strftime("%Y-%m-%d %H:%M")))

if __name__ == '__main__':

zs = ZClient()

zs.receive_message()

我们声明了发布者的IP地址及端口,当前它运行在同一个的主机上因此地址是127开头。我们在URL tcp://IP:PORT 上进行监听。一旦我们收到一个消息,就将其附上时间戳后记录到名为 subscriber.log 的文件中。运行客户端要做的所有工作就是执行 python <name_of_client_file>.py 。如果你在以上的架构上进行构建,它可以很好地充当近实时的日志聚合引擎。

我在Unbuntu主机上对以上的代码进行了测试。这里所用的代码保管在 github 上。这是一个如何配置zmq、docker和python服务器的基础讲解,在我的下一片文章中我们会使用我们已经学习的东西构建简单的微服务。

⑻ win XP的系统应该装哪个python的安装包

WinPython 新版本不再支持Windows XP平台,会出现错误提示WindowsError 127。

按照官网论坛上的解决方案(https://github.com/winpython/winpython/issues/17),把Pyzmq的版本(14.5)替换为旧版本(13.0),测试正常。

具体方法如下:安装最新版本的WinPython-32bit-2.7.9.4,然后安装2013年的最晚版本WinPython-32bit-2.7.6.2,提取2.7.6.2版本下的zmq文件夹。

⑼ 如何将ipython添加入spyder的python console中

打开spyder帮助菜单里的Optional dependencies菜单,看那些组件没有安装上的都装下。

其实与ipython console有关的就3个:内容ipython,qtconsole,zmq
用pip安装下就行

⑽ 怎么在虚拟机上的linux系统安装ipython

一、通过系统的软件包管理器安装ipython软件包。
1、ubuntu直接用以下命令:
#apt-get install ipython
//ubuntu将ipython的库文件安装到/usr/share/python-support/ipython目录下,包括一系列.pth文件和符号链接,而ipython的二进制文件则安装在/usr/bin/ipyton目录下。
2、redhat(centos)使用下面的命令:
#yum list | grep ipython
//查看所使用的yum源是否有ipython包,没有的话,就只能换源或者源码安装了。
#yum install ipython.noarch
//安装ipython
二、下载tar包安装方法:
1、 解压:
[root@CentOS_1 ~]# tar xf Python-2.7.8
2、进入解压后的文件夹Python-2.7.8,编译:
[root@centos_1 Python-2.7.8]# ./configure --prefix=/usr/local/python2.7
3、make安装
[root@centos_1 Python-2.7.8]# make && make
安装Ipython
1、下载Ipython
下载Ipython的源码包ipython-3.0.0.tar.gz。
2、解压安装包
[root@centos_1 tmp]# tar zxvf ipython-3.0.0
3、安装readline-devel包
在编译安装Ipython之前,确保已经安装了readline-devel包,否则安装完成后,IPython将无法正常输入;
[root@centos_1 ~]# yum install readline-devel
3、使用Python2.7.8编译安装。
[root@centos_1 ipython-3.0.0]# /usr/local/python2.7/bin/python setup.py build
[root@centos_1 ipython-3.0.0]# /usr/local/python2.7/bin/python setup.py install
4、安装完成之后,会在Python2.7.8的bin目录下面生成一个IPython的可执行文件,为了方便使用,将IPython连接到/usr/bin目录下面。
[root@centos_1 bin]# ln -sf ipython /usr/bin/ipython