![](/img/trans.png)
[英]How to use multiple ioloop in tornado and share data between the ioloop(s)?
[英]IPython - Is it possible to use the Tornado ioloop?
我正在編寫一些代碼,這些代碼需要在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()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.