我正在尝试在位于单独的.py文件中的get请求中调用函数。
@gen.coroutine
def get(self):
logging.info('starting TEST4: ' + str(datetime.now()))
result = yield gen.Task(common.t2())
print result
logging.info('finished TEST4: ' + str(datetime.now()))
self.write('complete!')
def t2():
""" This is a non-blocking function """
for x in range(10000000):
for y in range(10):
a = 1
a = "Slow non-blocking function"
return a
我试图让函数t2运行异步并打印变量的值" a"它正在回归。我也在Python 2.7中运行此代码,这也可能是一个问题。我做错了什么?
注意:我也不想使用" concurrent.futures.ThreadPoolExecutor(8)"溶液
答案 0 :(得分:5)
尽管有评论,但t2
是阻止函数,所有不使用回调或yield
的函数也是如此。并且没有有用的方法使t2
非阻塞,因为它不依赖于任何外部事件。由于t2
必须阻止调用它的任何线程,因此在不阻塞主IOLoop
线程的情况下调用它的唯一方法是在其他线程上调用它,最好的方法是使用ThreadPoolExecutor
。