【发布时间】:2019-06-03 17:21:26
【问题描述】:
有人能解释一下如何在 python 中的异步调用之间传递数据背后的概念吗?
我有这种情况:
我有一个主程序(主线程),然后我运行另一个异步调用,添加两个数字()并休眠一段时间。期望是让主线程等到 calc 和 sleep 完成。就伪代码而言,这可能如下所示:
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)
如何让最后一个print 等待z?我尝试使用 threading.Event() 并使用 set、wait 和 clear,但它们阻止了一切。
我不认为我的案例是独一无二的,必须有一个简洁的系统方法来处理它。我研究了扭曲的反应堆,但它部分成功。我的实际代码涉及 GUI,它必须等待异步进程的结果,然后自我更新和自动更新......但我认为这个例子描述了大部分问题
我想我错过了如何在 python 中异步工作的实际概念。
【问题讨论】:
-
您使用的是 Python 2 吗?看起来 Python 3 的 async 和 await 关键字在这里无济于事._.
-
@Geetransit,它是 2.7。我用'async'比喻而不是字面意思
-
你在 2019 年甚至使用 python 2.7 有什么原因吗?
-
@opa,我使用的生态系统在 2019 年仍在使用 2.7;因此我的问题
标签: python multithreading python-2.7 asynchronous