具有外部功能的协同程序

时间:2015-09-12 15:03:39

标签: 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!') 

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   

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

注意:我也不想使用" concurrent.futures.ThreadPoolExecutor(8)"溶液

1 个答案:

答案 0 :(得分:5)

尽管有评论,但t2 是阻止函数,所有不使用回调或yield的函数也是如此。并且没有有用的方法使t2非阻塞,因为它不依赖于任何外部事件。由于t2必须阻止调用它的任何线程,因此在不阻塞主IOLoop线程的情况下调用它的唯一方法是在其他线程上调用它,最好的方法是使用ThreadPoolExecutor