2016-01-29 6 views
0

Я новичок в концепции потоков в python. Найдите ниже сценарийПараллельное выполнение в python

def func1(con_no, con_name, *argv): 
"This functions takes around 3-4 min to completes" 

def func2(con_no, con_name, *argv): 
"This functions takes around 5 min to completes" 

def runthread(*fns): 

    proc = [] 
    for fn in fns: 
     p = Process(target=fn) 
     p.start() 
     proc.append(p) 
    for p in proc: 
     p.join() 

if __name__ == '__main__': 

runthread(func1(con_no, con_name), func2(con_no, con_name)) 

Приведенный выше код ожидает func1(), чтобы завершит свою работу и уходит в func2(). Как начать обе функции паралельно, так что func2() не ждать func1() для завершения его работы. Обратите внимание, что я использую версию python 2.7.

Обновленный постановка вопроса

+3

Ваша проблема здесь: 'runthread (func1(), func2())' ... потому что вы включили скобки, вы вызвали функции, а затем передали их результаты в 'runthread'. Вместо этого используйте 'runthread (func1, func2)'. – tdelaney

+0

@tdelaney У меня есть параметры для перехода к обеим функциям – louis

+0

@louis сделать ваш пример реалистичным для вашей проблемы. Если вам нужно передать параметры, отобразите функции, которые принимают параметры, а также покажут, где вы собираетесь передавать эти параметры. –

ответ

2

Вы начали func1 до того runthread называется:

Вы должны написать:

runthread(func1, func2) 

Чтобы передать параметры, прочитайте эти примеры: https://pymotw.com/2/multiprocessing/basics.html

+0

У меня есть параметры для перехода к обеим функциям. – louis

+0

@louis: Затем передайте их. Ваш пример не включает это, вам нужно выяснить, как организовать параметры, которые идут с каждым вызовом функции. – ShadowRanger

1

Учитывая, у вас есть con_no и con_name инициализируется с некоторыми значениями, вы можете использовать partial:

from functools import partial 

... 

runthread(partial(func1, con_no, con_name), partial(func2, con_no, con_name)) 
+0

Это сработало для меня! Благодаря! – louis

+1

Хорошо! «Partial» строит функцию из исходного (первый параметр) и передает при ее вызове следующие параметры. Таким образом, вы можете передать исходную функцию и нужные вам параметры, не вызывая ее, делегируя вызов экземпляру 'Process'. –

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