两个python脚本之间的通信

Det*_*rer 10 python inter-process-communicat

方法论问题:

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

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

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

Vla*_*lov 14

zeromq:http://www.zeromq.org/ -是进程间通信恕我直言,最好的解决办法,有一个外观极好的Python绑定:http://www.zeromq.org/bindings:python


mik*_*ike 5

由于“主”脚本看起来像一项服务,因此您可以使用 Web API 对其进行增强。瓶子是这个的完美解决方案。使用此附加代码,您的 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)
Run Code Online (Sandbox Code Playgroud)

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

import httplib

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


Bra*_*son 5

如果您对实现 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)
Run Code Online (Sandbox Code Playgroud)

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