Как расположить пару разных функций так, чтобы они действительно работали параллельно? - PullRequest
1 голос
/ 07 июля 2019

Я хочу выполнить две функции параллельно и хочу убедиться, что они работают параллельно. здесь я запускаю 2 функции параллельно, но вывод, который я получаю, отличается. в идеале они должны заканчиваться одновременно

Я использую ОС Windows 10, поэтому не могу использовать Ray. Даже не может использовать пул, так как используемые мной функции будут другими

Код:

import datetime
from multiprocessing import Process
import os
import datetime

def info(title):
    print(title)
    print('module name:', __name__)
    print('parent process:', os.getppid())
    print('process id:', os.getpid())

def f(name):
    info('function f')
    print('hello', name)


def func1():
    for i in range(1):
        print('function 1 running')
        for j in range(10000):
            for k in range(10000):
                a=1
    print(datetime.datetime.now())
    return


def func2():
    for i in range(1):
        print('function 2 running')
        for j in range(10000):
            for k in range(10000):
                a=1
    print(datetime.datetime.now())
    return

if __name__ == '__main__':
    info('main line')
    p1 = Process(target=func1())
    p1.start()
    p2 = Process(target=func2())
    p2.start()

Выход:

main line

module name: __main__

parent process: 17284

process id: 2372

function 1 running

2019-07-07 12:00:44.512577

function 2 running

2019-07-07 12:00:50.100357

Ожидаемый результат:

function 1 running

function 2 running

2019-07-07 12:00:44.512577

2019-07-07 12:00:44.512577

1 Ответ

0 голосов
/ 08 июля 2019

Вы написали

    p1 = Process(target=func1())
    p1.start()
    p2 = Process(target=func2())
    p2.start()

, который оценивает обе функции (последовательно) в текущем процессе, и передает результат None как параметр target.

Вместо этого вы хотите выполнить

    p1 = Process(target=func1)
    ...
    p2 = Process(target=func2)

, который передает вызываемое без оценки вызываемого.

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