首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Coro + Coro::LWP冻结

Coro + Coro::LWP冻结
EN

Stack Overflow用户
提问于 2012-08-28 14:50:52
回答 1查看 220关注 0票数 0

我有使用Coro,Coro::LWP和LWP::UserAgent的脚本。我创建了一个请求数组,并通过Coro的async {}运行它们。然后我使用它们的结果并保存到文件中。脚本运行几个小时,有时甚至几分钟,然后就会冻结。我已经做了一个strace查询,看看它在做什么。有一堆操作,但在保存结果后,在冻结之前有这样的操作:

代码语言:javascript
复制
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
rt_sigaction(SIGCHLD, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
nanosleep({1211417888, 0}, {1211354002, 168413065}) = ? ERESTART_RESTARTBLOCK (To be restarted)
--- SIGWINCH (Window changed) @ 0 (0) ---
restart_syscall(<... resuming interrupted call ...>) = ? ERESTART_RESTARTBLOCK (To be restarted)
--- SIGWINCH (Window changed) @ 0 (0) ---
restart_syscall(<... resuming interrupted call ...>

理解冻结有什么奇怪的地方吗?

PerlMonks上交叉发布。

解决:这是一个奇怪的睡眠,有很大的秒数(比如4000天)。

EN

回答 1

Stack Overflow用户

发布于 2013-02-20 03:05:29

Coro是一个多任务协作库,因此协程必须显式地将控制权交给调度器。您对Perl /usleep的调用会阻塞整个Perl进程,并阻止其他代码运行;在这种情况下,您可以执行一个“非阻塞”休眠,只阻塞当前的协程:

代码语言:javascript
复制
use Coro;
use AnyEvent;
...
Coro::AnyEvent::sleep 5;

顺便说一句,除非你绝对需要LWP的接口,否则我强烈建议切换到AnyEvent::HTTP。LWP是一种黑客技术,它对LWP的内部结构高度敏感,并且容易冻结。HTTP解决了我的程序锁定的几个问题,还提供了对SSL证书验证和代理(包括socks代理)使用的更好控制。总体而言,它只是一个更好、更有特色的模块。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12154140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档