如何从异步方法/线程传递/交换数据?

有人可以解释一下如何在python中的异步调用之间传递数据的概念吗?

我有这种情况:
我有一个主过程(mainthread),然后运行另一个异步调用,该调用将两个numbers()相加并休眠一段时间.期望让主线程等到calc和sleeping完成.在伪代码方面,这可能看起来像这样:

def example():
    def my_calc(x,y):
        z = x+ y
        time.sleep(2)
        return z  #this should get pushed to queue,but for simplicity we use 'return z'

    z = asyncSomething.callInThread(my_calc,2,20)  #assume we get z from queue
    return z+10

def runner():  #our main function
    print 'start'
    z = example()
    print 'result is {0}'.format(z)

如何使最后一次打印等待z?我尝试使用threading.Event()并进行设置,等待和清除,但它们阻止了所有操作.

我认为我的案子不是唯一的,必须有一种整齐的系统方法来处理.我看着扭曲的反应堆,但部分成功.我的实际代码涉及GUI,必须等待异步过程的结果,然后进行自我更新和自动更新…但是我认为该示例描述了大部分问题

我想我错过了如何在python中异步工作的实际概念.

最佳答案
如果使用多线程,则应使用futures封装结果.具体来说,在您的情况下将使用future.result(timeout = None):

Return the value returned by the call. If the call hasn’t yet completed then this method will wait up to timeout seconds. If the call hasn’t completed in timeout seconds,then a concurrent.futures.TimeoutError will be raised. timeout can be an int or float. If timeout is not specified or None,there is no limit to the wait time.

如上面的注释中所述,如果您不使用多线程(并且使用异步编程),那么回调将是解决之道.

相关文章

Python中的函数(二) 在上一篇文章中提到了Python中函数的定...
Python中的字符串 可能大多数人在学习C语言的时候,最先接触...
Python 面向对象编程(一) 虽然Python是解释性语言,但是它...
Python面向对象编程(二) 在前面一篇文章中谈到了类的基本定...
Python中的函数(一) 接触过C语言的朋友对函数这个词肯定非...
在windows下如何快速搭建web.py开发框架 用Python进行web开发...