-1

Я хочу выполнить две команды: 1-й в фоновом режиме и второй поверх нее.Многопоточность/подпроцесс Python с функциями

import time 
loop =[ 1,100] 
start_time_loop = time.time() 
for in loop: 
    print i 
end_time_loop = time.time() 

multi() 
    start_time_func = time.time() 
    c= 5*2 
    end_time_func = time.time() 

Петля должна бежать в фоновом режиме, когда выполняется умножение.

Я хочу, чтобы доказать:

start_time_loop < start_time_func 
end_time_func << end_time_loop 

Все указатели будут полезны.

+0

Может помочь: https://stackoverflow.com/questions/23100704/running-infinite-loops-using-threads-in-python/23102874#23102874 –

+0

Python не может запускать несколько процессов изначально. Посмотрите на модуль потоковой передачи. – Bretsky

+1

Python может использовать несколько процессов - это то, что делает модуль «многопроцессорности». –

ответ

1

Вам необходимо использовать многопроцессорную обработку, чтобы делать то, что вы хотите. Он в основном запускает новую (клонированную) копию python в фоновом режиме.

import time 
from multiprocessing import Process 


def thing_1(): 
    """We'll run this in a subprocess.""" 
    for i in range(10): 
     print('thing_1: {}'.format(i)) 
     # let's make it take a bit longer 
     time.sleep(1) 


def thing_2(): 
    """We'll run this as a normal function in the current python process.""" 
    time.sleep(1) 
    c = 5 * 2 
    print('thing_2: {}'.format(c)) 
    # let's make this take a bit longer too 
    time.sleep(1) 



if __name__ == '__main__': 
    # start the first thing running "in the background" 
    p = Process(target=thing_1) 
    p.start() 
    # keep a record of when we started it running 
    start_thing_1 = time.time() 

    # let's run the other thing 
    start_thing_2 = time.time() 
    thing_2() 
    end_thing_2 = time.time() 

    # this will wait for the first thing to finish 
    p.join() 
    end_thing_1 = time.time() 

    print('thing 1 took {}'.format(end_thing_1 - start_thing_1)) 
    print('thing 2 took {}'.format(end_thing_2 - start_thing_2)) 

В конце вы увидите:

thing 1 took 10.020239114761353 
thing 2 took 2.003588914871216 

Таким образом, в то время как thing_1 работает в фоновом режиме, локальный питон может продолжать делать другие вещи.

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

Смежные вопросы