使用回调在 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 应用程序之间进行通信的最佳方式是啥?的主要内容,如果未能解决你的问题,请参考以下文章
使用串行通信在 python 和 arduino 之间进行同步