问题描述
我正在尝试将来自多个线程的日志存储到一个文件中。 但是在我的日志文件中,来自不同线程的日志正在合并。 我不想要不同线程的单独日志文件。 但是当一个线程将日志写入文件时,另一个线程应该等到前一个线程完成写入所有日志。 我尝试了不同的方法来这样做,但最终没有找到合适的解决方案。
from threading import Thread, current_thread
import threading
import time
import logging
logging.basicConfig(filename='LogsThreadPrac.log', level=logging.INFO)
logger = logging.getLogger(__name__)
def worker(val):
print('value from the thread: {}'.format(val))
logger.info('+++++++++++++++++++++++++++++++++++++++')
print(current_thread().name)
logger.info('value from the thread: {}'.format(val))
time.sleep(3)
logger.info('+++++++++++++++++++++++++++++++++++++++')
t1 = Thread(target=worker, args=[1,], name='th'+str(1))
t1.start()
t2 = Thread(target=worker, args=[2,], name='th'+str(2))
t2.start()
1楼
您可以将 Lock 作为参数传递给您的工作人员,这样您就可以按照您想要的方式同步线程。
from threading import Thread, current_thread, Lock
import threading
import time
import logging
logging.basicConfig(filename='LogsThreadPrac.log', level=logging.INFO)
logger = logging.getLogger(__name__)
logger_lock = Lock()
def worker(val, lock):
print('value from the thread: {}'.format(val))
with lock:
logger.info('+++++++++++++++++++++++++++++++++++++++')
print(current_thread().name)
logger.info('value from the thread: {}'.format(val))
time.sleep(3)
logger.info('+++++++++++++++++++++++++++++++++++++++')
t1 = Thread(target=worker, args=[1, logger_lock], name='th'+str(1))
t1.start()
t2 = Thread(target=worker, args=[2, logger_lock], name='th'+str(2))
t2.start()
您可以 查看有关锁使用和示例的更多信息