次のコードでコメントを外すlog_it
と、threading.active_count
11に達します。これは、各ロガーが作成することを意味するためです_DummyThread daemons.Now
Q1.余分なスレッドを作成せずに同じことを達成する方法はありますか?
Q2. なぜロガーは別のスレッドを作成する必要があるのfun
ですか? 関数のように同じように実行できないのはなぜですか?
from gevent import monkey
monkey.patch_all()
import threading
import gc
import gevent
import logging
def print_stats():
while True:
gc.collect()
print threading.active_count()
gevent.sleep(2)
jobs = [gevent.spawn(print_stats)]
logger = logging.getLogger(__name__)
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
logger.setLevel(logging.INFO)
form = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
ch.setFormatter(form)
logger.addHandler(ch)
def log_it():
string = 'abcdefghijklmnopqrstuvwxyz'
logger.info(string)
def fun():
print "hello world"
def block_for_some_time():
log_it()
fun()
gevent.sleep(5)
print 'exiting thread'
for i in range(10):
jobs.append(gevent.spawn(block_for_some_time))
gevent.joinall(jobs)