Есть несколько способов сделать это, используя блокировки, а другой использует модуль logging
. Я писал многопоточный код, используя threading.Lock()
, но недавно я обнаружил, что logging
гораздо проще в использовании.
lock = threading.Lock()
with lock:
print("...")
with lock
вызовет lock.acquire()
при входе, а при выходе вызовет lock.release()
. Или вы можете вызвать их вручную. Но обязательно сделайте это release
после того, как вы его приобрели, иначе вы окажетесь в тупиках.
Другой более простой способ - использовать logging
, как я уже упоминал. Библиотека logging
является поточно-ориентированной, что означает, что любые потоки могут использовать функции одновременно. Использование этого модуля также позволяет записывать журналы в файлы журналов.
import logging
logging.basicConfig(format='%(message)s')
logging.info("...")