如何用 Python 实现通知?当用户点击开始的时候,通知其他进程执行任务

2019-09-17 11:42:54 +08:00
 smallpython
现在的需求是用户控制的进程为 A

执行任务的进程为 B

当用户点击开始按钮的时候,进程 A 通知进程 B 要做什么什么事情.

现在的想法是让 B 进程监听一个端口,然后 A 进程通过端口向 B 进程发送请求,B 进程接收到请求后根据请求内容执行任务.

或者当用户点击开始的时候,A 进程将任务的信息写入数据库或者文件中,然后 B 轮询访问对应的数据库或者文件,根据文件内容执行任务.

我的问题是有没有可能 B 进程不轮询访问这个资源,而是资源本身通知 B 进程要去做什么事情(因为考虑到 A 和 B 不在同一个机器上,也有可能网络不可达,所以不想采用第一个方案)
2190 次点击
所在节点    Python
12 条回复
BigBrother1024
2019-09-17 11:48:11 +08:00
celery?
BingoXuan
2019-09-17 11:53:02 +08:00
如果网络不可达,那 a,b 不就是孤立的吗?就算连接数据库也要有网络吧
gimp
2019-09-17 11:57:32 +08:00
用服务器来中转消息,websockets, mqtt 协议, 或者用各种 MQ,都能实现你的需求。
lllllliu
2019-09-17 12:00:42 +08:00
Socket 编程, 或者,最简单的一个 Pub/Sub 都可以呀。
zpfhbyx
2019-09-17 12:04:07 +08:00
都这么高端,不考虑队列么..
anonymous256
2019-09-17 17:44:19 +08:00
同一主机的话, socket 直接就可以了吧.
不同主机的话, 一个用 websocket server 监听, 一个用 websocket client, 用户点击的时候开始通信.
hspeed18
2019-09-17 20:00:29 +08:00
我觉得你的问题在于基础太差
smallpython
2019-09-18 09:17:56 +08:00
@BingoXuan 是指 A 与 B 之间无法直接通信,但是可以和第三方资源通信
smallpython
2019-09-18 09:20:17 +08:00
@zpfhbyx 用消息队列的话,如何获取队列里的任务呢?是轮询吗?
BingoXuan
2019-09-18 09:20:32 +08:00
@smallpython
第三资源可以是什么?另外一台服务器,还是某种 api 接口?
smallpython
2019-09-18 09:22:36 +08:00
@BingoXuan 一台服务器
BingoXuan
2019-09-18 09:38:48 +08:00
那还是走网络通讯比较好。如果不缓存消息做异步处理的话,可以试一下 zmq。a 做 publisher,中转服务器做 subscriber 订阅 a 的消息,同时充当 publisher,b 去订阅中转服务器就可以了。这样子 a 发送消息时候,经过中转服务器后 b 就能收到消息,而且速度很快,性能消耗不大。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/601461

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX