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

tru*_*com 5 python gevent

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

tru*_*com 1

刚刚做了一个测试,说写一个大文件会阻塞事件循环

#!/usr/bin/env python
import gevent
import datetime


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

def w():
    print "writing..."
    s = "*"*(1024*1024*1024)
    f = open( "e:/a.txt", "wb" )
    f.write(s)
    f.close()

t1 = gevent.spawn(hi)
t2 = gevent.spawn(w)
ts = [t1,t2]
gevent.joinall( ts )
Run Code Online (Sandbox Code Playgroud)

结果是这样的:

e:\zPython\zTest>gevent.write.large.file.py
writing...  # wait a long time here
write done.
2012-07-16 09:53:23.784000 Hello
2012-07-16 09:53:24.786000 Hello
2012-07-16 09:53:25.788000 Hello
Run Code Online (Sandbox Code Playgroud)

  • 这不是问题的一部分——“你尝试过什么”——而不是答案吗? (2认同)