我的项目使用eventlet
,现在我必须异步读取和写入文件(实际上是设备)。我尝试eventlet.tpool.execute()
来运行读取线程,但它阻止了主循环。
我的问题是,如何与eventlet线程同时运行读取线程?这两个线程有可能以某种方式进行通信吗?
快速草图:
def functionB():
while True:
data = readFile()
doSomethingWith(data)
def functionA():
doSomething()
tpool.execute(functionB)
doSomethingElse()
然后永远不会调用doSomethingElse()
。
答案 0 :(得分:0)
tpool.execute
结束之前, functionB
不应该返回。你的不会结束,所以doSomethingElse()
不应该执行。
换句话说,tpool.execute
不是类似于消防的类型。它在OS线程中生成函数和同步调用者。实际上,这非常有用。
如果你想开始一个新的永久工作线程,只需用普通的Python threading.Thread
来做。
tpool.execute
的典型用例:
def main():
f = tpool.execute(open, ...)
while True:
chunk = tpool.execute(f.read, size)
# process chunk
tpool.execute(f.close)
您可以尝试使用以下代码来解决问题:
def functionB():
while True:
data = tpool.execute(readFile) # just readFile -> tpool.execute
doSomethingWith(data)
def functionA():
doSomething()
eventlet.spawn_n(functionB) # tpool.execute -> spawn_n
doSomethingElse()