如何在tornado中以非同步的方式呼叫同步函式

2022-01-11 00:01:21 字數 2631 閱讀 6897

tornado相較於flask入門難,精通更難,用兩種框架都寫乙個最簡單的帶有time.sleep的入門dome就會發現區別,同時進來多個請求flask就不會阻塞(雖然也是單程序但flask會使用selet復用或者多執行緒方式避免給請求阻塞的感覺),而torndao就會發生阻塞(單程序單執行緒,乙個乙個來處理),這樣的問題在入門tornado時是需要搞清楚的,一般就是通過 @tornado.web.asynchronous,@tornado.gen.coroutine來解決。

""" 參考並拓展

有2個url,乙個是耗時的請求,乙個是可以或者說需要立刻返回的請求,希望訪問耗時的請求不會影響也不會被其他人的請求

專業點講就是:如何在tornado中以非同步的方式呼叫同步函式?

"""define("port", default=8000, help="run on the given port", type=int)

class my(object):

def __init__(self):

self.executor = threadpoolexecutor(2) #不可以設為1或0

@run_on_executor

def f(self):

print(os.path.join(os.path.dirname(__file__), 'python'))

time.sleep(2)

print(10)

return 1,2,3

@run_on_executor

def f1(self):

time.sleep(1)

print(15)

return 4,5,6 #不要 yield 4,5,6

@run_on_executor

def f2(self):

time.sleep(1.5)

print('hello, world1')

f11=self.f1()

f12=self.f()

a,b,c= f11.result()

d,e,f= f12.result()

# a,b,c= yield self.f1() # 這樣是不可以的

# d,e,f= yield self.f()

print "a,b,c:",a,b,c

print "d,e,f:",d,e,f

print('hello, world2')

return 'success',a+b+c+d+e+f #不要 yield 'success',a+b+c+d+e+f

tornado中非同步request使用

使用httprequest太無腦了,太莽了,當希望使用非同步request時,首先引入asynchttprequest from tornado.httpclient import asynchttpclient將介面中的方法新增上tornado的協程符 coroutine根據request的方式 ...

如何在Windows NT中以程式設計方式管理使用者許可權

在windows nt中,許可權用於提供與自由訪問控制不同的訪問控制手段。系統管理員使用許可權來控制哪些使用者 組能夠操縱系統的各個方面。應用程式可能會在更改系統資源 如系統時間 或關閉系統時使用許可權。使用者管理器工具可用於授予和撤銷帳戶的許可權。windows nt 3.51提供的功能允許開發人...

非同步執行如何在乙個函式中實現

前言 非同步執行經常要用到2個函式,乙個函式處理ui執行緒的呼叫,另外乙個函式處理核心執行緒呼叫。並且中間要用很多命令來轉接不同的函式。這樣函式的 量和處理要麻煩很多。可以用模板函式做一下轉接。模板函式如下 用到的函式打包知 std bind與std function詳解 pragma once i...