Предположим, у меня есть следующее в Python
# A loop
for i in range(10000):
Do Task A
# B loop
for i in range(10000):
Do Task B
Как запустить эти циклы одновременно в Python?
from threading import Thread
def loopA():
for i in range(10000):
#Do task A
def loopB():
for i in range(10000):
#Do task B
threadA = Thread(target = loopA)
threadB = Thread(target = loobB)
threadA.run()
threadB.run()
# Do work indepedent of loopA and loopB
threadA.join()
threadB.join()
Если вам нужен параллелизм, вот очень простой пример:
from multiprocessing import Process
def loop_a():
while 1:
print("a")
def loop_b():
while 1:
print("b")
if __name__ == '__main__':
Process(target=loop_a).start()
Process(target=loop_b).start()
Это просто самый простой пример , который я мог придумать. Обязательно прочтите http://docs.python.org/library/multiprocessing.html , чтобы понять, что происходит.
Если вы хотите отправить данные обратно в программу, я бы рекомендовал использовать очередь (которая, по моему опыту, наиболее проста в использовании).
Вместо этого вы можете использовать поток, если не возражаете против глобальной блокировки интерпретатора . Создание экземпляров процессов обходится дороже, но они предлагают настоящий параллелизм.
Почему вы хотите запустить два процесса одновременно? Потому что вы думаете, что они пойдут быстрее (есть большая вероятность, что нет). Почему бы не запустить задачи в одном цикле, например
for i in range(10000):
doTaskA()
doTaskB()
Очевидным ответом на ваш вопрос является использование потоков - см. модуль python threading. Однако потоки - это большая тема и имеет много подводных камней, поэтому прежде чем идти по этому пути, почитайте о них.
В качестве альтернативы вы можете запускать задачи в отдельных процессах, используя модуль python multiprocessing. Если обе задачи являются интенсивными для процессора, это позволит лучше использовать несколько ядер вашего компьютера.
Существуют и другие варианты, такие как coroutines, stackless tasklets, greenlets, CSP и т.д., но не зная больше о задачах A и B и о том, почему они должны выполняться одновременно, невозможно дать более конкретный ответ.
Как насчет: Цикл for i in range(10000): Do Task A, Do Task B? Без дополнительной информации у меня нет лучшего ответа.
Вы можете использовать потоковую обработку или многопроцессорную обработку.