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

发布时间:2019-12-28 发布网站:脚本之家
脚本之家收集整理的这篇文章主要介绍了如何从异步方法/线程传递/交换数据? 脚本之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

有人可以解释一下如何在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.

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

总结

以上是脚本之家为你收集整理的如何从异步方法/线程传递/交换数据? 全部内容,希望文章能够帮你解决如何从异步方法/线程传递/交换数据? 所遇到的程序开发问题。

如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:76874919,请注明来意。

脚本之家官方公众号

微信公众号搜索 “ 程序精选 ” ,选择关注!

微信公众号搜索 “ 程序精选 ” ,选择关注!
精选程序员所需精品干货内容!

标签:asynchronous