2017-09-02 146 views
1

我在使用異步方法時遇到了問題。我已經嘗試了很多堆棧溢出的例子,例如:Python異步方法

loop = asyncio.get_event_loop() 
loop.run_until_complete(method()) 
loop.close() 

----------- 

loop = asyncio.get_event_loop() 
tasks = [ 
    asyncio.ensure_future(method()), 
    asyncio.ensure_future(method()), 
] 
loop.run_until_complete(asyncio.wait(tasks)) 
loop.close() 

這些方法的問題是他們需要在執行前指定數字/方法。我需要的是一種從終端多次調用特定方法的方法,但它不能停留在最後一次調用中。

+0

你是什麼意思「多次調用一個特定的方法」?相同的方法或不同的方法?另外,你將如何從終端呼叫這些功能? –

+0

假設我有一個無效的方法,需要大約30秒的時間來處理。我想從終端打電話給它,但每次我不想等待它完成之後再次調用相同的方法。它可以在C#中作爲後臺工作者完成,但我不知道如何在python中完成。 – Andre

回答

0

可以使用multiprocessing模塊:

import multiprocessing 
import random 
import time 

def printRandomNumber(): 
    print(random.randint(0, 100)) # output a random number 0-100 
    time.sleep(30) # pause 30 seconds 

FUNCS = { 
    'foo': printRandomNumber 
} 

def createWorker(name): 
    func = FUNCS.get(name, lambda: None) 
    process = multiprocessing.Process(target = func, name = name) 
    process.start() 

while True: 
    func_name = input('next function name: ') 
    createWorker(func_name) 

執行時,你可以輸入 「foo」 和printRandomNumber會在後臺運行。當然,您可以將"foo"更改爲任何您喜歡的內容(如"printRandomNumber"),只需做一點工作,您甚至可以獲得一些參數。

+0

不錯!謝謝您的幫助。 – Andre