4

使用 Python 的 gevent 记录跨越多个正在运行的协同程序/微线程/Greenlets 的事件的最佳方法是什么?

我想记录的示例事件可能包括创建新连接或断开与套接字服务器的连接。

沿着这个思路——“生成的”协同程序是否有可能登录到同一个文件?由于对该文件的潜在并发写入尝试,这甚至是可取的吗?

4

1 回答 1

3

如果这只是单个进程,那么不,它们不可能同时写入。Greenlet 都在同一个 OS 线程中运行,并且是协同调度的,一次只能运行一个。

with open('log', 'w') as log:
    jobs = [gevent.spawn(log.write, 'event %d' % i) for i in range(10)]
    gevent.joinall(jobs)

...会导致greenlets一一写入日志。

如果您有多个进程,我建议您登录到redis,或者使用zeromq登录到专用守护进程。或使用其他一些外部日志记录守护程序。

于 2011-08-03T16:57:11.137 回答