Python 在长工作进程操作期间发送异步请求

Python 在长工作进程操作期间发送异步请求,python,python-asyncio,Python,Python Asyncio,我有一个情况,我有一个处理功能,可以花很多时间来运行。 此函数将进度观察者作为参数,并将进度通知观察者 我想发送异步http请求来报告所述的进度,并尽快返回到处理函数 def长处理功能(progressObserver): #在循环中处理。。。 progressObserver.updateProgress(x) #更多处理。。。 class MyClass(): def runLongProcessingFunction(slef): 结果=长处理功能(自身) #发送最后一个请求以报告结果(

我有一个情况,我有一个处理功能,可以花很多时间来运行。 此函数将进度观察者作为参数,并将进度通知观察者

我想发送异步http请求来报告所述的进度,并尽快返回到处理函数

def长处理功能(progressObserver):
#在循环中处理。。。
progressObserver.updateProgress(x)
#更多处理。。。
class MyClass():
def runLongProcessingFunction(slef):
结果=长处理功能(自身)
#发送最后一个请求以报告结果(理想情况下是*在*最后一条进度消息之后),如:
#patch(self.reportingUrl,json={'results':results,'progress':1.0})
def updateProgress(自我,进度):
#发送异步http请求以报告进度,如:
#patch(self.reportingUrl,json={'progress':progress})
#理想情况下,在下次进度更新时处理响应
#(如果在该时间到达,则在之后的时间到达)
我尝试使用
asyncio
,但它的主要目的似乎是使用一个主事件循环,并向其中添加多个异步任务。我甚至尝试在
updateProgress
函数中应用一个有点奇怪的功能,但除了它真的迫使我的场景在
asyncio
上运行之外,我无法让应用程序在最后等待最后一个挂起的进度任务,并在它之后发送结果请求(任何尝试都会失败,因为我从未真正处于
asyncio
循环中-我使用它来“运行一次”)

在我的例子中,与正常的
asyncio
code工作方式相比,每当我运行
longProcessingFunction()
时,我都会被阻止,直到它完成处理(除了调用的进度观察者)


寻找任何合理的架构,无论是使用
asyncio
还是不使用它。

不确定这是否是最好的方法,但我会在
updateProgress
中只将进度写入队列并退出。然后,在另一个任务中,我将处理在队列中找到的内容。无论这两个任务是作为asyncio还是线程实现的,它都会我们也会以同样的方式工作。asyncio是否有用取决于
longProcessingFunction
的功能。如果处理涉及大量I/O,asyncio会有帮助;如果是CPU密集型的,asyncio不会有帮助。你会希望改为使用多个进程。谢谢,这真的很有帮助。请注意,它是100%CPU guzzler,周末跑步者,相对较小的输入,无耻的博弈论算法,我希望有一天能理解。令人惊讶的是python需要另一个进程来发送请求并在稍后获取响应。