0

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

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

速写:

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

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

然后doSomethingElse()永远不会被调用。

4

1 回答 1

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()
于 2013-09-25T14:39:50.277 回答