python2.6中带回调的异步执行方法

2024-03-29 11:17:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试执行一个耗时的后端作业,由前端调用执行。此后端作业应在完成时执行回调方法,该方法将释放一个信号量。前端不必等待漫长的过程结束,就可以从启动作业的调用中得到响应。你知道吗

我试图使用多处理库中的Pool类来解决这个问题,但是遇到了一些问题。也就是说,执行传入apply\u async的方法的唯一方法似乎是调用apply\u async调用返回的ApplyResult对象中的.get()方法。你知道吗

为了解决这个问题,我想创建一个目标为apply的Process对象_结果.get. 但这似乎不管用。你知道吗

我在这里缺少一个基本的理解吗?你们有什么建议来解决这个问题。你知道吗

下面是我现在的一个小例子:

p = Pool(1)
result = p.apply_async(long_process, args=(config, requester), callback=complete_long_process)
Process(target=result.get).start()
response = {'status': 'success', 'message': 'Job started for {0}'.format(requester)}
return jsonify(response)

提前谢谢你的帮助!你知道吗


Tags: 对象方法getasyncresponse作业requesterresult
1条回答
网友
1楼 · 发布于 2024-03-29 11:17:22

我不太明白为什么这里需要一个进程对象。请看以下片段:

#!/usr/bin/python

from multiprocessing import Pool
from multiprocessing.managers import BaseManager
from itertools import repeat
from time import sleep

def complete_long_process(foo):
    print "completed", foo

def long_process(a,b):
    print a,b
    sleep(10)    

p = Pool(1)
result = p.apply_async(long_process, args=(1, 42),
                       callback=complete_long_process)

print "submitted"
sleep(20)

如果我理解你想要达到的目标,这就是。一旦您调用apply\u async,它就会启动long\u process函数并继续执行主程序。一旦完成,就调用complete\u long\u进程。不需要使用get方法来执行long\u进程,并且代码不会阻塞和等待任何东西。你知道吗

如果长\u进程似乎没有运行,我假设您的问题在长\u进程中的某个地方。你知道吗

汉努

相关问题 更多 >