Python中异步调用的同步化

2024-05-19 09:32:41 发布

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

使异步调用看起来同步的最佳方法是什么?例如,类似这样,但是如何协调调用线程和异步应答线程呢?在java中,我可能使用带超时的CountdownLatch(),但我找不到Python的明确解决方案

def getDataFromAsyncSource():
    asyncService.subscribe(callback=functionToCallbackTo)
    # wait for data
    return dataReturned

def functionToCallbackTo(data):
    dataReturned = data

Tags: 方法fordatareturndefcallbackjava解决方案
2条回答

你可以使用一个模块

import concurrent.futures

查看本文中的示例代码和模块下载链接:Concurrent Tasks Execution in Python

您可以将executor结果放在将来,然后获取它们,下面是http://pypi.python.org中的示例代码:

^{pr2}$

一个常见的解决方案是使用synchronized Queue并将其传递给回调函数。见http://docs.python.org/library/queue.html。在

因此,对于您的示例,这可能看起来像(我只是猜测API将向回调函数传递其他参数):

from Queue import Queue

def async_call():
    q = Queue()
    asyncService.subscribe(callback=callback, args=(q,))
    data = q.get()
    return data

def callback(data, q):
    q.put(data)

这是一个在内部使用threading模块的解决方案,因此根据您的异步库,它可能无法工作。在

相关问题 更多 >

    热门问题