python 与别的程序通信_如何在python和其他应用程序之间通信和共享数据?

集成模式

可用于此目的的集成模式很少。在

消息传递允许通过通信约定的消息进行解耦,其余的都作为平台特定的细节保留,这不会影响其他方。在

另一种方法可以是共享数据存储——一方将处理请求存储在那里,另一方将获取请求并进行处理。在

使用ZeroMQ的消息传递集成模式

ZeroMQ是一个库,允许非常轻量级的消息传递,而不需要运行一些大型消息传递应用程序。在

你所描述的可以这样解决:Python脚本正在循环中运行,等待执行某些操作的请求。在

任何客户机(能够发出ZeroMQ请求)都会请求操作并获得响应

由于客户机使用多种语言,您应该使用一些跨平台的序列化,结果缓冲区甚至更好的JSON字符串都是不错的选择。在

ZeroMQ有许多语言库,因此您应该能够进行通信。在

有一个很好的ZeroMQ Guide提供了概念的清晰解释,并显示了许多语言的实现。在

为了规划通信基础设施,我将从您的Python脚本绑定到某个TCP端口(被“固定”部分)和连接到该端口的客户端开始。在

Python脚本将使用REP socket(用于“reply”),您的客户机使用其他语言REQ socket。在

以下示例来自zguide中为多种语言编写的huge set of examples

Python服务器代码示例(hwserver.py):import zmq

import time

context = zmq.Context()

socket = context.socket(zmq.REP)

socket.bind("tcp://*:5555")

while True:

# Wait for next request from client

message = socket.recv()

print("Received request: %s" % message)

# Do some 'work'

time.sleep(1)

# Send reply back to client

socket.send(b"World")

示例PHP客户端(hwclient.php):

^{pr2}$

共享数据存储集成

共享文件或数据库还允许进程之间进行通信。如果锁定资源、注意同一个任务不是由多个工人处理等,问题就变得复杂了

结论

有多种模式和多种平台需要实现。在数据库-你需要设置并运行它。对于一些小任务来说可能太多了。在

共享文件-可能与从多个进程共享文件发生冲突-如果多个进程尝试写入,则可能存在冲突。在

通过TCP或UDP套接字进行消息传递-冷工作,但实际上,这在技术上是非常重要的,因为它有许多必须解决的问题(当一方关闭时,重新连接…)

web服务上的消息传递-您可以设置web服务器,接受来自客户端的请求,在服务器上进行处理。对于快速任务来说,这是相当容易的,但是如果任务需要超过30秒,则可能会失败,并且必须使用某种消息传递将其转换为后台处理。在

中型和大型的消息传递系统(比如Celery with RabbitMQ、Redis…)-有很好的工具,在许多情况下可能会被过度使用

ZeroMQ上的消息传递—这是我的最爱—您可以用几行代码设置它,并且运行时不会出现太多问题—它可以解决诸如重新连接之类的问题。等等,例如参见full working example for distributed locker

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值