2016-02-12 93 views
2

我想單獨運行一個函數。從我調用的函數中,我希望返回而不必等待其他函數結束。背景中的Python函數

我嘗試過threadind,但是這會等待,結束。

thread = threading.Thread(target=myFunc) 
thread.daemon = True 
thread.start() 
return 'something' 

是否可以立即返回並且其他進程仍在運行? 感謝您的答覆。

EDITED 工作的代碼如下所示:

import concurrent.futures 
executor = concurrent.futures.ThreadPoolExecutor(2) 
executor.submit(myFunc, arg1, arg2) 
+0

這段代碼是否在另一個函數中作爲內聯函數使用? (在'thread'完成之前結束的那個) –

+0

這是一個Django視圖函數,我想在結束被調用的函數之前重定向,但是這個等待。 –

+0

您必須將該功能卸載到另一個線程。你運行的是在同一個線程上工作。 –

回答

1

,如果我理解正確你的要求,你可能要採取的工人隊列 https://www.djangopackages.com/grids/g/workers-queues-tasks/

一看基本上它是不卸載一個好主意線程創建的工作,通常通過擁有後臺工作者(進程,線程)池和傳入請求的隊列來處理。

+0

謝謝,與此我得到執行者。 工作的代碼如下所示: 進口concurrent.futures 執行人= concurrent.futures.ThreadPoolExecutor(2) executor.submit(myFunc的,ARG1,ARG2) –

0

我認爲你使用的語法是正確的,我不明白爲什麼你的請求不應該立即返回。您是否確認請求實際掛起,直到線程結束?

我建議設置myFunc寫入到文件以供您跟蹤此

def myFunc(): 
    f = open('file.txt', 'w') 
    while True: 
     f.write('hello world') 
1

你都或多或少提出以下問題:

Is it possible to run function in a subprocess without threading or writing a separate file/script

你必須改變來自鏈接的示例代碼如下:

from multiprocessing import Process 

def myFunc(): 
    pass # whatever function you like 

p = Process(target=myFunc) 
p.start() # start execution of myFunc() asychronously 
print)'something') 

p.start()是異步執行的,即不管myFunc()的執行耗費多少時間,都立即打印出'something'。該腳本執行myFunc()並且不等待它完成。