我们正在尝试使用 ZeroRPC 从 NodeJS 调用 python 模块。
节点代码:
app.get('/topList', function(req, res){
var zerorpc = require("zerorpc");
var client = new zerorpc.Client({ timeout: 3000, heartbeatInterval: 300000 });
console.log('Here');
client.connect("tcp://127.0.0.1:4212");
console.log('And Here');
client.invoke("toplist", '2015-02-13T05:46:29.800Z', '2015-02-13T08:46:29.800Z', function(error, tlist, more)
{
console.log('And Here also');
if(error) {
console.error(error);
}
console.log(tlist);
res.send(tlist);
client.close();
});
});
Python代码:
import zerorpc
import logging
import gevent
logging.basicConfig()
class HelloRPC(object):
def toplist(self, fromtime, tilltime):
print 'Python Hello'
# Doing some some manipulations and placing the result in the variable top_20
return top_20
p = HelloRPC()
s = zerorpc.Server(p)
s.bind("tcp://127.0.0.1:4212")
s.run()
首先,我们运行 python 代码来启动服务器。接下来我们启动 nodejs 代码。
现在第一次在浏览器中尝试 localhost:8080/topList,nodejs 向 python 发出请求,然后 python 程序运行并将结果返回给 nodejs,然后在浏览器中我们可以看到结果。
如果我们第二次尝试 localhost:8080/topList 就会出现问题,nodejs 无法调用 python 代码。我们在 python 控制台中没有看到“Python Hello”。
我们无法修复这种情况。它只是第一次运行,然后 nodejs 无法调用 python。第一次运行后服务器是否关闭。
我们还尝试使用 While True 或 gevent ,如下所示。但仍然是同样的问题。
While True:
p = HelloRPC()
s = zerorpc.Server(p)
s.bind("tcp://127.0.0.1:4212")
s.run()
#gevent.spawn(s.run)
谁能提供一些想法来解决这个问题?