2016-06-15 3 views
0

Я новичок в питоне и многопроцессорности, поэтому, если вопрос кажется наивным, пожалуйста, простите меня. У меня есть две функции, которые я хочу запустить одновременно. Один из них - это реализация распознавания лиц с открытым кодом, а другой - стандартный код python.Параллельная обработка на Python

def main(): 
    does(s) # a function call 

def face(): 
    recog.main() #another call 

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

Предыдущие ответы по этой теме советуют использовать модуль потоковой передачи, но я пробовал его, и он не работает. Первая функция. который будет вызываться, выполняется первым, а затем вторым. Один мой друг рекомендовал модуль rospy. Это единственный способ? Спасибо в ожидании.

EDIT: В ответ на это, Make 2 functions run at the same time, пользователь написал, что резьб на самом деле не будет делать две функции работают одновременно

+1

* Предыдущие ответы на этот модуль заправочной тему советую, но я попробовал его и он не работает * Что вы попробуете, Предоставить [MCVE]. Также взгляните на [Мертвый простой пример использования многопроцессорной очереди, пула и блокировки] (http://stackoverflow.com/q/20887555) –

+0

thread.start_new_thread (main()) thread.start_new_thread (face()) Это не запускает оба из них одновременно. Вместо этого они заканчивают один за другим. Я попробовал потоковый модуль http://www.tutorialspoint.com/python/python_multithreading.htm Но результат был тот же. – Spock

+0

Если вы не используете ROS в любом случае, не используйте rospy только для работы параллельно. Это не то, для чего это предназначено, и это даст вам ненужную зависимость от ROS. – luator

ответ

1

Я использую multiprocessing module для выполнения двух функций параллельно. За то, что я сделал (изменилось к вашей ситуации):

import multiprocessing 

def main(): 
    does(s) # a function call 

def face(): 
    recog.main() #another call 

# Initiate two workers for the two functions 
workerMAIN = multiprocessing.Process(target=main) 
workerFACE = multiprocessing.Process(target=face) 

# Start the workers 
workerMAIN.start() 
workerFACE.start() 

# Wait until the functions have finished 
workerMAIN.join() 
workerFACE.join() 
+0

Большое спасибо SIr! Я попробовал модуль многопроцессорности с использованием целевого ключевого слова, но он не сработал. Однако вопрос о последующей деятельности. Является ли имя необходимым аргументом? Спасибо – Spock

+0

Нет, это не так: в [пример в 16.6.1.1] (https://docs.python.org/2/library/multiprocessing.html) вы можете увидеть 'Process (target = f, args = (' боб»))'. Таким образом, вы можете удалить часть имени! Я уточню свой ответ :) –

+0

Для меня это был также пример, который я искал. Как @Spock, я посмотрел на предлагаемые дубликаты, но не смог заставить его работать, пока не выполнил код выше –