Запуск двух процессов в Python. multiprocessing — это пакет, поддерживающий порождение процессов с использованием API, аналогичный модулю threading / процессный параллелизм Пакет multiprocessing предлагает как локальный, так и удаленный параллелизм, эффективно обходя Глобальную блокировку интерпретатора за счёт использования подпроцессов вместо потоков. Благодаря этому, модуль multiprocessing позволяет программисту полностью использовать несколько процессоров на компьютере. Он работает как в Unix, так и в Windows. Простым примером использования нескольких процессов могут быть два процесса, которые выполняются отдельно. В этом примере запускаются два процесса: countUp() отсчитывает единицу вверх каждую секунду, countdown() – единицу вниз каждую секунду. import multiprocessing import time from random import randint def countUp():   i = 0   while i <= 3:    print('Up:\t{}'.format(i))    time.sleep(randint(1, 3)) # sleep 1, 2 or 3 seconds    i += 1 def countDown():   i = 3   while i >= 0:    print('Down:\t{}'.format(i))    time.sleep(randint(1, 3)) # sleep 1, 2 or 3 seconds    i -= 1 if __name__ == '__main__':   # Initiate the workers.   workerUp = multiprocessing.Process(target=countUp)   workerDown = multiprocessing.Process(target=countDown)   # Start the workers.   workerUp.start()   workerDown.start()   # Join the workers. This will block in the main (parent) process   # until the workers are complete.   workerUp.join()   workerDown.join()
1 год назад
Многопоточный Python на примерах: избавляемся от дедлоков Многопоточное программирование — это непросто. Самое неприятное — схватить дедлок, то есть взаимную блокировку потоков, когда поток 1 занял ресурс А и пытается захватить ресурс Б, а в это же время поток 2 занял ресурс Б и пытается захватить А. В этом случае потоки взаимно блокируют друг друга. В статье от Озона с помощью графа ожидания в рантайме определяются дедлоки. Подмечены такие важные штуки, как накладные расходы от поиска дедлоков и минусы глобальной блокировки на сам граф ожидания, которые увеличивают долю последовательного кода и, привет, закон Амдала. Примеры кода в статье взяты из небольшой опенсорсной библиотеки locklib. На заметку начинающим разработчикам — читать чужой код очень полезно. А тут приятное с полезным, автор разбирает чужой код за нас, дополняя его теорией. По замерам автора, блокировка с проверкой на дедлоки в 10 раз медленнее, чем штатный питоновский threading.Lock. Такое замедление может оказаться неприятным, поэтому используйте с осторожностью. Возможно, для вашей задачи лучше использовать асинхронное программирование. Очень важно понимать, какой класс проблем решается асинхронщиной, а какой — многопоточностью. Если понравился пост, пробивайте палец вверх:) #python