上周为了重写公司的其中一个关键进程,断然选用Python快速开发了一版

首先,是启动器

虽然python脚本可以直接启动,但为了兼容其他进程,需要封装成一个原命名的进程

#include <Python.h>
#include <sched.h>

int main(int argc, char *argv[]) {
    //设置进程优先级,因为有其他更重要的进程
    nice(10);
    // 设置cpu亲和性,因为是4线程的机器,所以仅亲和后2个cpu
    cpu_set_t  mask;
    CPU_ZERO(&mask);
    CPU_SET(2, &mask);//第3个
    CPU_SET(3, &mask);//第4个,其实就是第二个core
    sched_setaffinity(0, sizeof(mask), &mask);

    Py_SetProgramName(argv[0]);
    Py_Initialize(); //标准的啦,初始化Python环境
    PySys_SetArgv(argc, argv);
    FILE * fp = fopen("/home/xxx/yyy/zzz.py", "r"); //打开入口py脚本的句柄,准备打开
    // 这里并没有去判断是否真的存放,因为必须存放,不然也什么都做不了
    //PyRun_SimpleFile(fp, "zzz.py");
    PyRun_AnyFile(fp, "zzz.py"); //启动之,哈哈
    Py_Finalize(); // 严格来说从不调用,哈哈,因为是守护进程,退出的话,都是直接退
    return 0;//符合标准C嘛,哈哈
}

编译之

gcc -O2 -I/usr/include/python2.7 -lpython2.7 -MD -MT -pthread -ldl zzz.c -o zzz

需要带上-pthread和-dl等参数,否则可能无法加载模块

python代码部分

把路径添加进去,防止找不到py文件

import sys
sys.path.append("/home/xxx/yyy")

接下来的,自然就是业务逻辑了

话说,最近耗子哥跟百毒闹得很欢哦,哈哈



blog comments powered by Disqus

Published

2013-03-25

Categories


Tags

Fork me on GitHub