伊皮顿没有';不能像python那样执行代码

伊皮顿没有';不能像python那样执行代码,python,console,ipython,tornado,spyder,Python,Console,Ipython,Tornado,Spyder,我正在尝试执行此API调用:(名为wwo.py) 如果我试图调用这个文件并从普通python控制台执行它,我不会得到一个响应,它会保持' 但是如果我使用IPython控制台调用它,或者使用Spyder执行它,它会调用响应,即使我没有初始化它,它也会被调用 import wwo wwo.meteo(q='London', key='API_FREE_KEY') wwo.response # returns '' on normal python console, returns the ful

我正在尝试执行此API调用:(名为
wwo.py

如果我试图调用这个文件并从普通python控制台执行它,我不会得到一个
响应
,它会保持
'

但是如果我使用IPython控制台调用它,或者使用Spyder执行它,它会调用
响应
,即使我没有初始化它,它也会被调用

import wwo

wwo.meteo(q='London', key='API_FREE_KEY')

wwo.response # returns '' on normal python console, returns the full response on ipython console
是一种异步方法。它立即返回,请求和响应的处理将在中进行。当您使用普通Python或普通IPython终端运行代码时,没有IOLoop正在运行,因此请求从未实际发生

当您通过qtconsole(Spyder)或笔记本在IPython中运行它时,结果会有所不同,因为IPython本身已经在运行tornado IOLoop,因此异步事件最终会触发,并调用回调

根据所提供的代码,您似乎希望使用阻塞,而不是AsyncHTTPClient,其外观如下:

from tornado.httpclient import HTTPClient
http_client = HTTPClient()
...
resp = http_client.fetch(url) # returns HTTPResponse when it is complete
response_body = resp.body

但是,根据应用程序的上下文,您可能实际上想要使用AsyncHTTPClient,在这种情况下,您需要将IOLoop与应用程序集成。如果这已经是tornado应用程序,那么最好的方法可能是通过AsyncHTTPClient.fetch返回的将来使用tornado的异步功能。否则,您可能最终会这样做,这与使用blocking HTTPClient相比没有显著的好处,除非您正在编写一个您希望能够在异步tornado上下文和同步上下文中使用的函数。

ah,这就是为什么,这个想法是试图将阻塞
urloop
转换为异步客户端,这样我就可以在没有
IOLoop
的情况下使用它。现在,当我尝试在spyder中运行tornado程序时出错,并返回此
运行时错误:IOLoop已经运行了
再次感谢!如果您正在使用run_sync,您将希望通过
IOLoop()
创建一个新的IOLoop,而不是通过
IOLoop.instance()
from tornado.httpclient import HTTPClient
http_client = HTTPClient()
...
resp = http_client.fetch(url) # returns HTTPResponse when it is complete
response_body = resp.body