簡體   English   中英

IPython-是否可以使用Tornado ioloop?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM