免费注册 查看新帖 |

Chinaunix

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

LWP 全局UserAgent如何用在多线程中? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-02-23 14:37 |只看该作者 |倒序浏览
1. 在主程序重创建了一个LWP UserAgent, 并以此UA登陆网站.
my $ua         = LWP::UserAgent->new(agent => "Mozilla/4.0", keep_alive => 1);
my $cookie_jar = HTTP::Cookies->new(); #(file => "cookies.${user}.txt", autosave => 1);
login_task(); #登陆成功并update 全局UA.

2. 启动多线程,所有线程都使用全局UA的副本和服务器进行交互.
my $t1 = threads->create( \&abc );
my $t2 = threads->create( \&xyz );

3. 问题是如果abc 和 xyz update了cookie, 则彼此之间无法同步.

已经试验过 $ua 不能设置为共享变量, 不设置为共享变量则线程中的$ua 则无法保持一致.
难道只有将cookie保存,然后两线程中的 $ua 通过update cookie来保持一致吗?

论坛徽章:
0
2 [报告]
发表于 2012-02-23 14:49 |只看该作者
为什么不考虑下anyevent http呢

论坛徽章:
0
3 [报告]
发表于 2012-02-23 16:51 |只看该作者
我不太懂事件驱动的编程方法,不过看了下anyevent的介绍, 感觉anyevent象是个调度器的作用,条件满足了就call 对应的call back 函数, call back函数完事后就退出, 把cpu控制权交出来是吧? windows系统就是事件驱动的,不过这有个问题就是如果某个call back太耗时间, 程序就会卡在那CB函数上面了是不? windows也常常这样~_~.

谢过 斯文牛氓

论坛徽章:
0
4 [报告]
发表于 2012-02-24 14:01 |只看该作者
你这会引发线程安全问题,最好还是clone一下在使用,保持相对独立,cookie信息用共享的就行了,注意有写入读出操作时使用下变量锁

论坛徽章:
0
5 [报告]
发表于 2012-02-27 12:20 |只看该作者
嗯, Thanks nsnake_cu!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP