与系统调用协作的eventlet

时间:2013-09-24 14:19:15

标签: python eventlet

我的项目使用eventlet,现在我必须异步读取和写入文件(实际上是设备)。我尝试eventlet.tpool.execute()来运行读取线程,但它阻止了主循环。

我的问题是,如何与eventlet线程同时运行读取线程?这两个线程有​​可能以某种方式进行通信吗?

快速草图:

def functionB():
  while True:
    data = readFile()
    doSomethingWith(data)

def functionA():
  doSomething()
  tpool.execute(functionB)
  doSomethingElse()

然后永远不会调用doSomethingElse()

1 个答案:

答案 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()