我的程序需要一个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是空的。