我写了actionscript和javascript。添加回调来调用一段代码在日常生活中是很正常的。
但来到 python 似乎并不是一件容易的事。我几乎看不到回调风格的东西。我的意思是真正的回调,不是假的,这是一个假的回调示例:
下载文件列表,你可以写:
urls = []
def downloadfile(url,callback):
//download the file
callback()
def downloadNext():
if urls:
downloadfile(urls.pop(),downloadNext)
downloadNext()
这可行,但最终会满足最大递归限制。而真正的回调不会。
一个真正的回调,据我了解,不能不是来自程序,它必须来自物理,比如 CPU 时钟,或者一些硬件 IO 状态变化,这会调用一些对 CPU 的拦截,CPU 中断当前的操作流程并检查如果运行时注册了关于这个int的任何代码,如果有,运行它,操作系统将它包装为信号或事件或其他东西,最后将它传递给应用程序。(如果我错了,请指出)这样可以避免函数调用堆栈堆积溢出,否则将陷入无限递归。
python中有类似协程的东西来处理多任务,但必须非常小心。如果在任何例程中你被阻塞,所有任务都会被阻塞
有一些第三方库,例如twisted或gevent,但获取和安装似乎很麻烦,平台有限,在python 3中没有得到很好的支持,不适合编写简单的应用程序和分发。
多处理,繁重且仅适用于 linux
线程,因为 GIL,从来都不是首选,而且它似乎是一个伪选项。
为什么不 python 在标准库中给出一个实现?还有其他简单的方法来获得我想要的真正回调吗?