zvepb
@zvepb

Как улучшить вывод данных или как поставить timeout в apply_async?

Хочу сделать нормальный вывод информации в своем скрипте. Проблема в том, что когда использую Pool потоков с apply_async вывод иногда накладывается друг на друга или перекрывает другой вывод .
Для примера :

from multiprocessing.pool import ThreadPool as Pool


pool = Pool(10)


def sdsd():
    for i in range(1, 10000):
        print('Вывод информаци скрипта 0101010000101011101010101 {}'.format(i))
        print('--------------------------------------------------------------------')


for i in range(1, 10):
    pool.apply_async(sdsd)

pool.close()
pool.join()

Вывод получается таким :
Вывод информаци скрипта 0101010000101011101010101 3794
--------------------------------------------------------------------
--------------------------------------------------------------------
Вывод информаци скрипта 0101010000101011101010101 5218
--------------------------------------------------------------------
--------------------------------------------------------------------
Вывод информаци скрипта 0101010000101011101010101 5235
Вывод информаци скрипта 0101010000101011101010101 5577
--------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------------

А ожидается такой :

Вывод информаци скрипта 0101010000101011101010101 5077
--------------------------------------------------------------------
Вывод информаци скрипта 0101010000101011101010101 2511
--------------------------------------------------------------------
Вывод информаци скрипта 0101010000101011101010101 4139
--------------------------------------------------------------------
Вывод информаци скрипта 0101010000101011101010101 5237
--------------------------------------------------------------------
Вывод информаци скрипта 0101010000101011101010101 3448
--------------------------------------------------------------------

Я так понимаю мне нужно поставить тайм аут , но простой time.sleep() не меняет картинку.
Как можно улучшить вывод данных ?
  • Вопрос задан
  • 106 просмотров
Решения вопроса 1
zvepb
@zvepb Автор вопроса
Спасибо за ответы

from multiprocessing.pool import ThreadPool as Pool
from multiprocessing import Lock


pool = Pool(10)
lock = Lock()


def sdsd(lock):
    with lock:
        for i in range(1, 10):
            print('Вывод информаци скрипта 0101010000101011101010101 {}'.format(i))
            print('--------------------------------------------------------------------')


for i in range(1, 10):
    pool.apply_async(sdsd(lock))

pool.close()
pool.join()
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы