Perl中的非阻塞/异步执行

有没有办法在Perl中实现非阻塞/异步执行(不使用 fork()?)?

我以前是一个Python开发人员多年,Python有一个非常好的“Twisted”框架,允许这样做(使用DEFERREDs.当我运行搜索,看看Perl中有没有什么可以做同样的事情,我遇到了POE framework – 似乎“接近”我正在寻找的东西,但是…花了一些时间阅读文档和“玩”代码后,我反对“墙” – 这是以下限制(从POE::Session文档):

Callbacks are not preemptive. As long as one is running,no others will be dispatched. This is known as cooperative multitasking. Each session must cooperate by returning to the central dispatching kernel.

这个限制本质上是违反了异步/并行/非阻塞执行的目的 – 通过限制在任何给定时刻只执行一个回调(代码块).没有其他回调可以开始运行,而另一个已经运行!

那么… Perl有什么办法可以实现多任务(并行,非阻塞,异步执行代码),而不需要fork()? – 类似于DEFERREDs在Python中?

解决方法

Coro是POE和线程之间的混合.从阅读它的CPAN文档,我认为IO :: Async执行真正的异步执行. threads也可以使用 – 至少Padre IDE成功使用它们.

相关文章

1. 如何去重 #!/usr/bin/perl use strict; my %hash; while(...
最近写了一个perl脚本,实现的功能是将表格中其中两列的数据...
表的数据字典格式如下:如果手动写MySQL建表语句,确认麻烦,...
巡检类工作经常会出具日报,最近在原有日报的基础上又新增了...
在实际生产环境中,常常需要从后台日志中截取报文,报文的形...
最近写的一个perl程序,通过关键词匹配统计其出现的频率,让...