使用Python的gevent记录跨多个运行的co例程/microthreads/greenlet的事件的最佳方法是什么?
我想记录的示例事件可能包括创建新连接或删除到套接字服务器的连接。
按照这种思路,“派生”的联合例程是否可以登录到同一个文件?由于对该文件的潜在并发写尝试,这样做是否明智?
最佳答案
如果这只是一个进程,那么不,他们不可能同时写。greenlet都运行在同一个os线程中,并且是协同调度的,一次只能运行一个。
with open('log', 'w') as log:
jobs = [gevent.spawn(log.write, 'event %d' % i) for i in range(10)]
gevent.joinall(jobs)
…会导致greenlet一个接一个地写入日志。
如果您有多个进程,我建议您登录到
redis
,或者使用zeromq登录到专用守护进程或者使用其他外部日志守护进程。