使用Python的gevent记录跨多个运行的协同例程/微线程/ Greenlets的事件的最佳方法是什么?
我想记录的事件示例可能包括创建新连接或删除与套接字服务器的连接.
沿着这条思路 – “衍生的”协同例程是否有可能记录到同一个文件?由于可能对该文件进行并发写入尝试,这是否可取?
解决方法:
如果这只是单个进程,那么不,它们不可能同时写入. Greenlets都在相同的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登录到专用守护进程.或者使用其他一些外部日志记录守护程序.