Как мне запустить мультипроцессор? - PullRequest
1 голос
/ 29 октября 2019

Я пытаюсь запустить два процесса одновременно, а не запускать по одному. Мой код следующий. Может кто-нибудь сказать мне, что не так? Спасибо!

from multiprocessing import Process
from os import getpid
from random import randint
from time import time, sleep

def download_task(filename):
    print('Initiate downloading task, task No.[%d].' % getpid())
    print('Begin downloading %s...' % filename)
    time_to_download = randint(5, 10)
    sleep(time_to_download)
    print('Finished downloading %s! It took %d seconds' % (filename, time_to_download))

def main():
    start = time()
    p1 = Process(target=download_task, args=('Python: from beginer to lunatic.pdf',))
    p1.start()
    p2 = Process(target=download_task, args=('Peking Hot.avi',))
    p2.start()
    p1.join()
    p2.join()
    end = time()
    print('It took %.2f seconds in total.' % (end - start))

if __name__ == '__main__':
    main()

Прямо сейчас, это все, что я получил.

It took 0.14 seconds in total.

Но я должен получить что-то вроде этого:

Start downloading Python: from beginer to lunatic.pdf...
Start downloading Peking Hot.avi...
Finished downloading Python: from beginer to lunatic.pdf! It took 5 seconds
Finished downloading Peking Hot.avi! It took 5 seconds
It took 5.00 seconds in total.

1 Ответ

0 голосов
/ 29 октября 2019

Вы должны очистить выходные потоки в вашем многопроцессорном бите. Вы можете сделать это, добавив flush=True к своим операторам печати, добавив sys.stdout.flush() в конец функции, добавив один print("", flush=True) в конец функции или указав параметр -u при вызовеВаша программа из командной строки (python -u your_file_name.py). Последний запускает python в режиме " без буферизации ". Любой из них должен работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...