具有外部功能的协同程序

Dat*_*vid 0 python tornado

我试图在位于单独的.py文件中的get请求中调用一个函数.

main.py

@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!') 
Run Code Online (Sandbox Code Playgroud)

common.py(外部.py)

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   
Run Code Online (Sandbox Code Playgroud)

我试图让函数t2运行异步并打印它返回的变量"a"的值.我也在Python 2.7中运行此代码,这也可能是一个问题.我究竟做错了什么?

注意:我也不想使用"concurrent.futures.ThreadPoolExecutor(8)"解决方案.

Ben*_*ell 5

尽管它有注释,但它t2 一个阻塞函数,所有函数都不使用回调或yield.并且没有有用的方法来进行t2非阻塞,因为它不依赖于任何外部事件.因为t2必须阻止它被调用的任何线程,所以在不阻塞主IOLoop线程的情况下调用它的唯一方法是在其他线程上调用它,并且最好的方法是使用a ThreadPoolExecutor.