В:
import concurrent.futures
import logging
import time
from concurrent.futures import ThreadPoolExecutor
def thread_function(name):
# logging.info("Thread %s: starting", name)
print(f'Thread {name}: starting')
time.sleep(2)
print(f'Thread {name}: finishing')
# logging.info("Thread %s: finishing", name)
def hello(i):
time.sleep(i)
print(i)
if __name__ == "__main__":
format = "%(asctime)s: %(message)s"
logging.basicConfig(format=format, level=logging.INFO, datefmt="%H:%M:%S")
logging.info('Before tpe')
with ThreadPoolExecutor(max_workers=3) as executor:
result = executor.map(thread_function, range(3))
logging.info('After tpe')
print('out here')
time.sleep(3)
print('out there')
В отличие от печати, средство ведения журнала не создает сообщения в ожидаемом порядке. При регистрации сообщения Before tpe и After tpe чередуются с сообщениями в thread_function.
Этого не должно быть. Можно ли использовать регистратор для отображения сообщений в ожидаемом порядке? порядок должен меняться только между запусками внутри thread_function, но сообщения до и после исполнителя всегда должны находиться в одних и тех же позициях (до/после)
Проблема заключалась в использовании регистратора с print() в то же время. Использование только регистратора дает ожидаемый результат:
22:34:33: Before tpe
22:34:33: Thread 0: starting
22:34:33: Thread 1: starting
22:34:33: Thread 2: starting
22:34:35: Thread 1: finishing
22:34:35: Thread 0: finishing
22:34:35: Thread 2: finishing
22:34:35: After tpe
22:34:35: out here
22:34:38: out there
Подробнее здесь: https://stackoverflow.com/questions/791 ... ent-future
Сообщения регистратора не отображаются в ожидаемом порядке при использовании с concurrent.futures.ThreadPoolExecutor. ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Опасен ли вызов concurrent.futures.ThreadPoolExecutor в конечной точке FastAPI?
Anonymous » » в форуме Python - 0 Ответы
- 37 Просмотры
-
Последнее сообщение Anonymous
-