2013-09-18 4 views
14

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

from multiprocessing import Process 
def func1: 
    #does something 

def func2: 
    #does something 

if __name__=='__main__': 
    p1 = Process(target = func1) 
    p1.start() 
    p2 = Process(target = func2) 
    p2.start() 
+4

Вы уверены, что первый из них не просто быстро заканчивается? Кроме того, убедитесь, что процессы действительно независимы, не дожидаясь ресурсов, которые другой использует, или данных, которые другие будут производить. – user2357112

+0

Вы когда-нибудь читали это сообщение [Как выполнять две функции одновременно] (http://stackoverflow.com/questions/2108126/how-to-run-two-functions-simultaneous) – zionpi

+0

@ user2357112: первая функция занимает около 2 минут для выполнения, когда я запускаю его, и обе функции полностью независимы. – user2739601

ответ

32

Вы делаете это правильно. :)

Попробуйте запустить этот глупый код:

from multiprocessing import Process 
import sys 

rocket = 0 

def func1(): 
    global rocket 
    print 'start func1' 
    while rocket < sys.maxint: 
     rocket += 1 
    print 'end func1' 

def func2(): 
    global rocket 
    print 'start func2' 
    while rocket < sys.maxint: 
     rocket += 1 
    print 'end func2' 

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

Вы увидите, что он напечатает начать func1 ', а затем «начать func2», а затем после (очень) долгое время вы, наконец, увидеть функции конца , Но они будут выполняться одновременно.

Поскольку процесс занимает некоторое время, чтобы начать работу, вы можете даже увидеть «start func2» до «start func1».

9

Это именно то, что мне нужно. Я знаю, что это не был задан вопрос, но я модифицированный код Shashank, чтобы удовлетворить Python 3 для всех, кто хочет :)

from multiprocessing import Process 
import sys 

rocket = 0 

def func1(): 
    global rocket 
    print ('start func1') 
    while rocket < sys.maxsize: 
     rocket += 1 
    print ('end func1') 

def func2(): 
    global rocket 
    print ('start func2') 
    while rocket < sys.maxsize: 
     rocket += 1 
    print ('end func2') 

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

замещающий sys.maxsize для числа затем печати (ракета), и вы можете увидеть его подсчитывать по одному время. Получить номер и остановиться

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