python - IPython - 是否可以使用 Tornado ioloop?

标签 python asynchronous ipython tornado

我正在编写一些需要在 IPython 中异步运行后台任务的代码。对于在后台运行任务,我想我可以使用 IPython 使用的相同 Tornado ioloop。有没有办法获取当前 ioloop 实例的句柄,并向其添加回调?

从最简单的意义上来说,我想在后台运行像下面的 f() 这样的函数:

from tornado import ioloop
import datetime

def f():
    print "Hi!"

i= ioloop.IOLoop.instance()
dt = datetime.timedelta(seconds=4)

ioloop.PeriodicCallback(f, 2000).start()

i.start()

但是,当我从 IPython 加载此文件 tornado_test.py 时,我无法在打印时同时键入命令:

In [1]: import tornado_test
Hi!
Hi!

我可以使用 IPython ioloop 来实现此目的吗?

最佳答案

这样做的问题是 i.start() 调用会阻塞。 Tornado是一个单线程框架;您只能通过在事件循环内实际运行代码来获得异步行为。因此,当事件循环在主线程中运行时,唯一可以运行的代码是循环内调度的代码。

但是,您可以通过在后台线程中运行 i.start() 命令来获得所需的行为,如下所示:

from tornado import ioloop
import datetime

def f():
    print "Hi!"

i= ioloop.IOLoop.instance()
dt = datetime.timedelta(seconds=4)

ioloop.PeriodicCallback(f, 2000).start()
t = threading.Thread(target=i.start)
t.start()

关于python - IPython - 是否可以使用 Tornado ioloop?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25464364/

相关文章:

python - 使用 PyPlot 为散点图制作动画

python - 如何在 ipython 笔记本中启用换行

python - IPython 7.0.1 中的多行编辑中断

python - 如何将梅尔频谱图转换为对数缩放梅尔频谱图

python - 如何在Python 3.6中创建自动换行程序

javascript - 具有内部异步函数的多个同步函数

javascript - 如何从异步调用返回响应?

python - python函数的签名是什么

python - 如何测试Python中一条线是否与任意数量的其他未知线相交?

javascript - 内部异步函数完成运行后如何调用外部函数返回?