2017-09-02 140 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