方法论问题:
我有一个“主”python脚本,它在我的系统上运行一个无限循环,我想偶尔发送一些信息给它(例如一个json数据字符串),其他一些python脚本将由我自己稍后启动或其他程序,并将在发送字符串后结束。
我不能在这里使用子进程,因为我的主脚本不知道对方何时运行以及它们将执行什么代码。
我正在考虑让主脚本侦听本地端口,并让其他脚本在该端口上发送字符串,但是有更好的方法吗?
答案 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)
虽然这已经很久了但我想我会发布这个,因为今天我有一个类似的问题,但使用服务器。