使用回调在 python 2 应用程序之间进行通信的最佳方式是啥?

Posted

技术标签:

【中文标题】使用回调在 python 2 应用程序之间进行通信的最佳方式是啥?【英文标题】:What is the best way to communicate between python 2 applications using callbacks?使用回调在 python 2 应用程序之间进行通信的最佳方式是什么? 【发布时间】:2018-10-25 15:09:13 【问题描述】:

我有 2 个独立的 python 2 应用程序在同一台 linux (ubuntu) 计算机上运行。

我想将消息从一个发送到另一个(双向)并在回调函数中接收这些消息。

有可能吗?你有什么例子可以参考吗?

谢谢

【问题讨论】:

【参考方案1】:

有不同的选项可用于在 python 应用程序之间进行通信。

一个简单的方法是使用基于 HTTP 的 API。每个应用程序都将公开一个特定的端口,并通过交换 HTTP 请求进行通信。 有几个框架允许您通过几个步骤构建它。例如,使用瓶子:

在 app1 中:

from bottle import route, run, request

@route('/action_1', method='POST')
def action_1_handler():
    data = request.json
    print(str(data))
    # Do something with data
    return 'success': True, 'data': 'some_data': 1

run(host='localhost', port=8080)

在 app2 中:

import requests
r = requests.post("http://localhost:8080/action_1", json='v1': 123, 'v2': 'foo')
print r.status_code
# 200
data = r.json()
# u'data': u'some_data': 1, u'success': True

请注意,如果 app1 在收到 HTTP 请求后执行的操作需要很长时间,这可能会导致超时错误。在这种情况下,请考虑在另一个线程中运行该操作或使用替代通信协议(例如套接字、ZeroMQ 消息库)。

一些相关阅读:

Basic Python client socket example Communication between two python scripts https://www.digitalocean.com/community/tutorials/how-to-work-with-the-zeromq-messaging-library

【讨论】:

谢谢。我用过ZeroRPC(zerorpc.io),它基于Zeromq,提供Python、NodeJS和Shell接口。我在 [这里] (linkedin.com/feed/update/urn:li:activity:6495780259076538368) 写了一篇关于我的第一印象的帖子。

以上是关于使用回调在 python 2 应用程序之间进行通信的最佳方式是啥?的主要内容,如果未能解决你的问题,请参考以下文章

WCF 在服务器上的服务之间进行通信

回调函数的使用方法(类之间的通信)

如何在 Java 和 Python 之间创建 2 路通信

使用串行通信在 python 和 arduino 之间进行同步

Java专家之路-- 面向对象的基础概念和原理,使用回调机制实现对象之间通信

使用多队列在两个python脚本之间进行通信的方法