两个python脚本之间的通信

时间:2013-04-25 11:13:20

标签: python inter-process-communicat

方法论问题:

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

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

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

3 个答案:

答案 0 :(得分:13)

zeromq:http://www.zeromq.org/ - 是进程间通信的最佳解决方案,并且对python具有优秀的绑定:http://www.zeromq.org/bindings:python

答案 1 :(得分:4)

由于“main”脚本看起来像服务,因此您可以使用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'

答案 2 :(得分:3)

如果您对实现Mike 3.x中提供的客户端脚本感兴趣,您很快就会发现没有可用的httplib。幸运的是,使用库http.client完成了同样的事情。

否则它是相同的:

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

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