Python gevent 我没有看到猴子修补默认文件打开/读/写/关闭,如何在 gevent 异步中制作文件 io

标签 python gevent

在 gevent monkey 补丁中,我没有看到任何关于默认文件对象的操作。 如何在基于 gevent 的程序中使用异步文件读/写?

最佳答案

您可以使用 1.0b3 中可用的 gevent 的 fileobject.FileObjectThreadPool 类:

pip install http://gevent.googlecode.com/files/gevent-1.0b3.tar.gz#egg=gevent

那么你的例子会变成:

#!/usr/bin/env python
import gevent
from gevent.fileobject import FileObjectThreadPool
import datetime


def hi():
    while True:
        print datetime.datetime.now(), "Hello"
        gevent.sleep( 1 )

def w():
    print "writing..."
    s = "*"*(1024*1024*1024)
    print 'about to open'
    f_raw = open( "./a.txt", "wb" )
    f = FileObjectThreadPool(f_raw, 'wb')
    f.write(s)
    f.close()
    print 'write done'

t1 = gevent.spawn(hi)
t2 = gevent.spawn(w)
ts = [t1,t2]
gevent.joinall( ts )

我看到带有该代码的以下输出:

writing...
about to open
2012-08-13 13:00:27.876202 Hello
2012-08-13 13:00:28.881119 Hello
2012-08-13 13:00:29.959642 Hello
...
2012-08-13 13:00:58.010001 Hello
2012-08-13 13:00:59.010146 Hello    
2012-08-13 13:01:00.010248 Hello
write done
2012-08-13 13:01:01.469547 Hello
...

关于Python gevent 我没有看到猴子修补默认文件打开/读/写/关闭,如何在 gevent 异步中制作文件 io,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11496996/

相关文章:

python - Cython 导入错误 : No module named parallel

python - 如何使用 Gevent 为 python Bottle 实现 TLS/SSL

Python:单元测试基于套接字的代码?

python - 在 greenlet 中访问 flask.g

python - 如何编写一个 python 函数来最大化给定 2N X 2N 矩阵中 N X N 左上子矩阵的总和?

python - 空列表在 while 和 for 循环的上下文中不生成输出

python - 什么是 gevent.queue.Channel?

python - time.sleep 挂起

python - 将 .overrideColor 值分配给 Maya 中的按钮

python - 以编程方式获取节点 nodeType 列表 (xml.dom.minidom.Node)