Не удалось запустить мультипроцессор - PullRequest
0 голосов
/ 08 ноября 2019

Я изучаю многопроцессорность Python, с приведенным ниже кодом в блокноте Jupyter. Но он не может выполнить функцию задачи подпроцесса download_task и выводить только что-то вроде 0.11. без ошибок.

В то время как когда я копирую этот код в онлайн-исполнитель Python, он работает нормально.

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

def download_task():
    time_to_download = randint(5, 10)
    print("befor sleep")
    sleep(time_to_download)
    print("after sleep")
def main():
    start = time()
    p1 = Process(target=download_task)
    p1.start()
    p2 = Process(target=download_task)
    p2.start()
    p1.join()
    p2.join()
    end = time()
    print('%.2f.' % (end - start))

main()

Вот скриншот результата выполнения блокнота jupyter :, enter image description here

1 Ответ

1 голос
/ 08 ноября 2019

Мне удалось решить проблему, добавив () после имени функции.

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

def download_task():
    time_to_download = randint(5, 10)
    print("befor sleep")
    sleep(time_to_download)
    print("after sleep")
def main():
    start = time()
    p1 = Process(target=download_task())
    p1.start()
    p2 = Process(target=download_task())
    p2.start()
    p1.join()
    p2.join()
    end = time()
    print('%.2f.' % (end - start))

main()

Если вы работаете на терминале, вы увидите сообщение об ошибке:

AttributeError: Can't get attribute 'download_task' on <module '__main__' (built-in)>

Очевидно, что при использовании только download_task он обрабатывал download_task как атрибут main, а не функции.

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