18

方法论问题:

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

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

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

4

3 回答 3

21

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

于 2013-04-25T11:19:18.490 回答
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)

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

import httplib

c = httplib.HTTPConnection('localhost', 8080)
c.request('POST', '/process', '{}')
doc = c.getresponse().read()
print doc
# 'All done'
于 2013-04-25T15:01:21.270 回答
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)

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

于 2017-04-19T21:07:24.367 回答