V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
smallpython
V2EX  ›  Python

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

  •  
  •   smallpython · 2019-09-17 11:42:54 +08:00 · 2272 次点击
    这是一个创建于 1893 天前的主题,其中的信息可能已经有所发展或是发生改变。
    现在的需求是用户控制的进程为 A

    执行任务的进程为 B

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

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

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

    我的问题是有没有可能 B 进程不轮询访问这个资源,而是资源本身通知 B 进程要去做什么事情(因为考虑到 A 和 B 不在同一个机器上,也有可能网络不可达,所以不想采用第一个方案)
    12 条回复    2019-09-18 09:38:48 +08:00
    BigBrother1024
        1
    BigBrother1024  
       2019-09-17 11:48:11 +08:00 via Android
    celery?
    BingoXuan
        2
    BingoXuan  
       2019-09-17 11:53:02 +08:00
    如果网络不可达,那 a,b 不就是孤立的吗?就算连接数据库也要有网络吧
    gimp
        3
    gimp  
       2019-09-17 11:57:32 +08:00
    用服务器来中转消息,websockets, mqtt 协议, 或者用各种 MQ,都能实现你的需求。
    lllllliu
        4
    lllllliu  
       2019-09-17 12:00:42 +08:00   ❤️ 1
    Socket 编程, 或者,最简单的一个 Pub/Sub 都可以呀。
    zpfhbyx
        5
    zpfhbyx  
       2019-09-17 12:04:07 +08:00
    都这么高端,不考虑队列么..
    anonymous256
        6
    anonymous256  
       2019-09-17 17:44:19 +08:00
    同一主机的话, socket 直接就可以了吧.
    不同主机的话, 一个用 websocket server 监听, 一个用 websocket client, 用户点击的时候开始通信.
    hspeed18
        7
    hspeed18  
       2019-09-17 20:00:29 +08:00
    我觉得你的问题在于基础太差
    smallpython
        8
    smallpython  
    OP
       2019-09-18 09:17:56 +08:00
    @BingoXuan 是指 A 与 B 之间无法直接通信,但是可以和第三方资源通信
    smallpython
        9
    smallpython  
    OP
       2019-09-18 09:20:17 +08:00
    @zpfhbyx 用消息队列的话,如何获取队列里的任务呢?是轮询吗?
    BingoXuan
        10
    BingoXuan  
       2019-09-18 09:20:32 +08:00
    @smallpython
    第三资源可以是什么?另外一台服务器,还是某种 api 接口?
    smallpython
        11
    smallpython  
    OP
       2019-09-18 09:22:36 +08:00
    @BingoXuan 一台服务器
    BingoXuan
        12
    BingoXuan  
       2019-09-18 09:38:48 +08:00   ❤️ 1
    那还是走网络通讯比较好。如果不缓存消息做异步处理的话,可以试一下 zmq。a 做 publisher,中转服务器做 subscriber 订阅 a 的消息,同时充当 publisher,b 去订阅中转服务器就可以了。这样子 a 发送消息时候,经过中转服务器后 b 就能收到消息,而且速度很快,性能消耗不大。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   938 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 21:17 · PVG 05:17 · LAX 13:17 · JFK 16:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.