我在python3中需要一个Future对象。
Python有两个内置的实现:
asyncio模块有一个,但是不适合我的应用程序。
concurrent.futures有一个,但是其文档说明该对象只能由Executor对象创建:
以下Future方法旨在用于单元测试和Executor实现。
https://docs.python.org/3/library/concurrent.futures.html#future-objects
基本界面是:
class Future:
def get(self):
pass
def set(self, val):
pass
虽然这里的关键是,如果在get
之前调用set
,则该方法将阻塞直到设置值。
[set
正在设置值并释放正在等待get
的线程。
在多线程应用程序中使用上述内置实现之一是否安全?
如何有效实施?
如何有效实施?
我不知道有效,但是简单:
听起来像具有value
成员,is_set
成员以及lock
和condition
的类。 set()
方法应
lock
is_set
已经为真,则引发错误,否则is_set = True
condition.notifyAll()
get()
方法应锁定该锁,然后循环等待条件变量,直到is_set
为True,最后返回该值。
如果有使用纯Python代码的更有效方法,那超出了我的范围。