Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 与外部函数的协程_Python_Tornado - Fatal编程技术网

Python 与外部函数的协程

Python 与外部函数的协程,python,tornado,Python,Tornado,我试图调用位于单独的.py文件中的get请求中的函数 main.py common.py(external.py) 我试图让函数t2运行async并打印它返回的变量“a”的值。我还在Python2.7中运行这段代码,这可能也是一个问题。我做错了什么 注意:我也不想使用“concurrent.futures.ThreadPoolExecutor(8)”解决方案。尽管有注释,t2是一个阻塞函数,所有不使用回调或yield的函数也是如此。而且没有有效的方法使t2非阻塞,因为它不依赖于任何外部事件。由于

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

main.py common.py(external.py) 我试图让函数t2运行async并打印它返回的变量“a”的值。我还在Python2.7中运行这段代码,这可能也是一个问题。我做错了什么


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

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

谢谢。如何将此函数转换为使用回调?实际上,您不能。只有当您在等待自己的代码以外的东西(例如网络)时,回调才有意义。如果你只是这样做计算,避免阻塞的唯一方法就是使用另一个线程。谢谢。如何将此函数转换为使用回调?实际上,您不能。只有当您在等待自己的代码以外的东西(例如网络)时,回调才有意义。如果您只是这样进行计算,那么避免阻塞的唯一方法就是使用另一个线程。
@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