2016-04-24 103 views
0

我有一個端點,它獲得一些數據,然後運行一些需要大約30秒的代碼,然後返回特定於數據的響應。我需要能夠在30秒內用不同的數據多次擊中端點,但代碼仍然需要運行並返回正確的數據特定結果。Python - 同時運行代碼

這裏就是我的意思是:

class Foo(Controller): 
    def POST(self, **kwargs): 
     [Run Code That Takes 30 Seconds] 
     Return [Result That Changes Bassed off POST request Sent] 

當我現在運行這個權利,我打的端點不止一次在30秒的代碼只是用新的數據重新啓動並完全忽略舊的數據,它的結果。

我該如何讓終端在秒鐘內多次被點擊,但還是會給出相應的結果?很高興回答任何問題!

回答

2

您應該首先分析您的腳本以查看您的任務是否受cpu或io約束。

如果你的任務是IO約束

看一看在ASYNCIO庫python 3

或者在線程庫python 2 + python 3

如果你的任務是綁定

CPU,如果你的任務是必然的CPU,你不能使用,因爲GIL的線程。

您將有選擇:

  • 使用多庫:python2 + python3

  • 運行python每個cpu核心的實例,每個運行一個不同的任務。

  • 使用像Celery這樣的任務隊列。