在 Web 服务中异步调用 Python 脚本

CGI 中需要调用一个 Python 脚本,脚本去更新执行 update 的 sql 语句,时间较长,超过了 Web 服务器的最大连接时间,因此需要使用异步调用脚本的方式。

同步方式

char command[300] = "~/tools/read_emoji_text.py";
iRet = system(command);
MMJsonOutput *pOutResult = new MMJsonOutput;
pOutResult->GetResult()["errcode"] = iRet;
pOutResult->GetResult()["msg"] = "upload file success";`

很明显,Python 脚本执行完后才给请求返回数据

异步方式

if (0 == fork()) {
    char command[300] = "~/tools/read_emoji_text.py";
    iRet = system(command);
    _exit(127);
}
else {
    MMJsonOutput *pOutResult = new MMJsonOutput;
    pOutResult->GetResult()["errcode"] = iRet;
    pOutResult->GetResult()["msg"] = "upload file success";

    return pOutResult;
}

主进程直接返回数据,在子进程中去调用同步的 system 函数,执行 Python 脚本。这里还可以使用更底层的 execl 系统调用来执行脚本。

遇到的问题

使用异步的方式,iRet 的返回值一直为 256,相当于 read_emoji_text.py 执行返回值为 256 >> 8 = 1。出现这个错误的原因是打开文件的路径写的是相对路径,而二进制在执行时并不是在这个路径。

def get_mark_data():
    file = open("~/tools/emoji_data")
    revise_list = []

参考

linux system函数的学习

System Return Code was 256

转载于:https://my.oschina.net/lvyi/blog/794058

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值