免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3169 | 回复: 10
打印 上一主题 下一主题

perl能重新加载模块嘛?(no module为空操作时) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-10 13:36 |只看该作者 |倒序浏览
最近使用SNMP的一个module,结果发现module调用过一次后,继续调用有时会有问题,就想到能否调用一次模块后,卸载模块,重新加载一遍,试过no module,结果是空操作,模块并没有真的卸载, 请问,perl有提供相关的方法吗?

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
2 [报告]
发表于 2009-04-10 13:55 |只看该作者
在什么情况下会需要加载模块,然后卸载,然后再加载,然后。。。

论坛徽章:
0
3 [报告]
发表于 2009-04-10 15:24 |只看该作者
net-snmp模块,snmpv3情况下,因为engineID的处理,net-snmp和agent的实现不太一样,第一次调用模块能够正常运行,但第二次时就出问题了。试过在不同{}中调用等方法,都不能解决问题。所以只有想着能否卸载模块了……

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
4 [报告]
发表于 2009-04-10 15:50 |只看该作者
原帖由 dugu072 于 2009-4-10 15:24 发表
net-snmp模块,snmpv3情况下,因为engineID的处理,net-snmp和agent的实现不太一样,第一次调用模块能够正常运行,但第二次时就出问题了。试过在不同{}中调用等方法,都不能解决问题。所以只有想着能否卸载模块 ...

我觉得查查为嘛第二次出问题更好些

论坛徽章:
0
5 [报告]
发表于 2009-04-10 16:43 |只看该作者
原因是知道了,协议层面net-snmp是符合标准的,但是agent不符合,不过agent的实现我无法改变,只有在脚本加载模块上想办法了~

论坛徽章:
0
6 [报告]
发表于 2009-04-10 16:58 |只看该作者
no module真正做的事情取决于module里面的unimport函数
你可以改module里面unimport代码,或者直接删除当前包符号表里面从module导入的东西

论坛徽章:
0
7 [报告]
发表于 2009-04-10 17:05 |只看该作者
具体说下原因:
net-snmp在第一次调用的时候,底层会保存从agent的获取的信息(其中有个字段理论上是所有agent一致)
第二次调用net-snmp时,操作的是第二个agent,获取的理论应该一致的字段却和第一个agent相同了(而这点是agent实现的,我改变不了),所以net-snmp直接用之前保存的第一个agent的信息和第二个agent通信,当然无法进行了……
那么在这里,我解决问题的话,只能考虑在调用完net-snmp模块后,能够清除它底层保存的信息。通过不同作用域调用,搞不定;该模块也没有提供对应的方法,所以我也只能想到卸载一次模块了,MMMIX能否给点提示啊,谢谢~

[ 本帖最后由 dugu072 于 2009-4-10 23:12 编辑 ]

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
8 [报告]
发表于 2009-04-10 18:46 |只看该作者
原帖由 dugu072 于 2009-4-10 17:05 发表
net-snmp在第一次调用的时候,底层会保存从agent的获取的信息(其中有个字段理论上是所有agent一致)
第二次调用net-snmp时,操作的是第二个agent,获取的理论应该一致的字段却和第一个agent相同了(而这点是agent实现的,我改变不了),所以net-snmp直接用之前保存的第一个agent的信息和第二个agent通信,当然无法进行了……
那么在这里,我解决问题的话,只能考虑在调用完net-snmp模块后,能够清除它底层保存的信息。通过不同作用域调用,搞不定;该模块也没有提供对应的方法,所以我也只能想到卸载一次模块了,MMMIX能否给点提示啊,谢谢~

可以考虑对你所使用的模块进行扩展,直接操作它里面的数据。如果它没有提供对应的方法,那就改代码,然后作为 patch 提交,这样升级后你需要的功能还在。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
9 [报告]
发表于 2009-04-10 19:11 |只看该作者
SNMP 我天天在用,也没发现这个问题。

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
10 [报告]
发表于 2009-04-10 21:03 |只看该作者
原帖由 flw 于 2009-4-10 19:11 发表
SNMP 我天天在用,也没发现这个问题。

看楼主的说法不像是 SNMP 的问题,而是他用的 agent 有问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP