Я новичок в многопоточности, теперь я хочу использовать поток для записи в файл журнала каждые 2 секунды , у меня есть два решения, но я не знаю, какое из нихлучше.
Первый:
def logger(msg):
if msg != None:
logging.info(msg)
def main():
last = time.time()
while True:
msg = get_msg_from_somewhere()
current = time.time()
if current - last > 2:
t1 = threading.Thread(target=logger, args = (msg, ))
t1.start()
last = current
Второй:
message = None
def logger():
global msg
while True:
if msg != None:
logging.info(msg)
msg = None
time.sleep(2)
def main():
t1 = threading.Thread(target=logger)
t1.setDaemon(True)
t1.start()
while True:
update_msg_from_somewhere()
Мои мысли:
Я предпочитаю второе решениепотому что ему не нужно постоянно сравнивать временную метку и создавать бесконечные новые потоки (хотя они будут уничтожены после их завершения, верно?), но я думаю, что способ передачи msg
не самый лучший (через глобальные переменные).
Есть ли у вас какие-либо идеи о том, как передавать переменные потоку демона во время его работы?И какое решение вы предпочитаете?Почему?
Большое спасибо!