在Gevent中如何跨多个协程/绿色线程/微线程进行日志记录?
在使用Python的gevent时,记录跨多个协程/微线程/绿色线程的事件的最佳方法是什么?
我想记录的事件示例包括新连接的创建或与套接字服务器的连接中断。
顺着这个思路,‘生成’的协程是否可以记录到同一个文件?这样做是否可行,因为可能会出现同时写入该文件的情况?
1 个回答
3
如果这是一个单一的进程,那么不,他们不可能同时写入。Greenlet(绿色线程)都在同一个操作系统线程中运行,并且是合作式调度的,也就是说一次只能有一个在运行。
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来记录到一个专门的守护进程中。或者使用其他一些外部的日志守护进程。