2015-09-04 27 views
-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可以使用多个进程 - 这就是'multiprocessing'模块的功能。 –

回答

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副本。