Python 与外部函数的协程
我试图调用位于单独的.py文件中的get请求中的函数 main.py common.py(external.py) 我试图让函数t2运行async并打印它返回的变量“a”的值。我还在Python2.7中运行这段代码,这可能也是一个问题。我做错了什么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非阻塞,因为它不依赖于任何外部事件。由于
注意:我也不想使用“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