多处理python子进程没有运行?

时间:2014-03-03 11:50:05

标签: python multiprocessing daemon snmp child-process

我的程序需要一个snmp陷阱监听器。它需要不断接收snmp陷阱并对它们进行进一步的计算。我正在使用python的multiprocessing模块。

现在,我的程序看起来像这样:

import multiprocessing
from snmpListener import snmpCompare
def main():
    execute()

def execute():
    try:
        p=Process(target=snmpCompare)
        p.start()
        #my code that runs here
        #it is basically sending commands to my server
        #which sends snmp alerts as response to my commands
        p.join()
    except (KeyboardInterrupt,SystemExit):
        p.terminate()

在snmpListener.py中,

import multiprocessing

def trapListener():
    snmpTrap= receiveSnmpTrap()
    q.put(snmpTrap)

def snmpCompare():
    f=open('Alerts.txt','w')
    q=Queue()
    p=Process(target=trapListener, args=(q,))
    p.daemon=True
    p.start()
    while True:
        alert= p.get()
        f.write(alert)
        #perform calculation on 'alert' 
    p.join()
    f.close()

但是,代码正在运行,以便execute()函数的子进程在创建时运行。然后我父进程中的所有命令都在服务器上执行。子进程和父进程似乎不同时运行。未接收到与命令对应的警报。即,文件“Alerts.txt”为空。

我很久没有使用python的multiprocessing模块了。事实上,我在多处理方面的工作很少。我不知道我哪里出错了,我有点困惑。欢迎任何建议。

更新:从trapListener函数创建子进程时,我正在调用execute。我的计算是在trapListener本身完成的。我还让trapListener成为守护进程。我的代码现在正在运行。此外,在子进程中生成错误,因为它正在终止。因此Alerts.txt是空的。

0 个答案:

没有答案