【问题标题】:Communication between two python scripts两个python脚本之间的通信
【发布时间】:2013-04-19 06:11:46
【问题描述】:

一个方法问题:

我有一个“主”python 脚本,它在我的系统上无限循环运行,我想偶尔向它发送信息(例如 json 数据字符串)以及稍后将由我自己启动的其他一些 python 脚本或其他程序,将在发送字符串后结束。

我不能在这里使用子进程,因为我的主脚本不知道另一个何时运行以及它们将执行什么代码。

我正在考虑让主脚本在本地端口上侦听,并让其他脚本在该端口上向它发送字符串,但有更好的方法吗?

【问题讨论】:

  • Sockets 是一种选择,但还有其他选择,具体取决于您使用的操作系统。

标签: python inter-process-communicat


【解决方案1】:

如果您对实现 Mike 在 Python 3.x 中提出的客户端脚本感兴趣,您会很快发现没有可用的 httplib。幸运的是,库 http.client 也是如此。

否则同理:

import http.client
c = http.client.HTTPConnection('localhost', 8080)
c.request('POST', '/process', '{}')
doc = c.getresponse().read()
print(doc)

虽然这是旧的,但我想我会发布这个,因为我今天有一个类似的问题,但使用的是服务器。

【讨论】:

    【解决方案2】:

    由于“主”脚本看起来像一项服务,您可以使用 Web API 对其进行增强。 bottle 是完美的解决方案。使用此附加代码,您的 python 脚本能够接收请求并处理它们:

    import json
    
    from bottle import run, post, request, response
    
    @post('/process')
    def my_process():
      req_obj = json.loads(request.body.read())
      # do something with req_obj
      # ...
      return 'All done'
    
    run(host='localhost', port=8080, debug=True)
    

    客户端脚本可以使用 httplib 向服务器发送消息并读取响应:

    import httplib
    
    c = httplib.HTTPConnection('localhost', 8080)
    c.request('POST', '/process', '{}')
    doc = c.getresponse().read()
    print doc
    # 'All done'
    

    【讨论】:

    • 如何从客户端 python 脚本向该服务发送请求?
    • @Noah 在答案中查看我的补充
    【解决方案3】:

    zeromq:http://www.zeromq.org/ - 是进程间通信的最佳解决方案,恕我直言,并且具有出色的 python 绑定:http://www.zeromq.org/bindings:python

    【讨论】:

    • 非常感谢!我不想使用 http 甚至 tcp,因为我认为我的问题与网络无关,使用 zeromq 的 ipc 解决方案是完美的 :)
    • 尽情享受吧!三年前,它对我来说是一颗灵丹妙药;))
    • 这个库是轻量级的吗,我每秒可以发送 100 条消息?
    猜你喜欢
    • 2019-03-26
    • 1970-01-01
    • 2018-08-06
    • 2017-07-24
    • 1970-01-01
    • 2021-06-02
    • 1970-01-01
    • 1970-01-01
    • 2021-07-19
    相关资源
    最近更新 更多