Multiprocessing Python

Contents
Introduction
Простой пример
Цикл
Более сложный пример

Introduction

В этой статье вы узнаете как запускать несколько процессов одновременно.

Простой пример

import multiprocessing import time start = time.perf_counter() def do_something(): print('Sleeping 1 second...') time.sleep(1) print('Done Sleeping...') p1 = multiprocessing.Process(target=do_something) p2 = multiprocessing.Process(target=do_something) p1.start() p2.start() p1.join() p2.join() finish = time.perf_counter() print(f'Finished in {round(finish-start, 2)} second(s)')

Цикл

Когда нужно запустить большое количество процессов одновременно, это можно сделать с помощью цикла.

import multiprocessing NUMBER_OF_TASKS = 10 p_list = [] for _ in range(0, NUMBER_OF_TASKS): p = multiprocessing.Process(target=connect_to_url) p.start() p_list.append(p) for process_ in p_list: process_.join()

Приближенный к жизни пример

import requests import multiprocessing import datetime import sys import urllib3 import time import subprocess urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) NUMBER_OF_TASKS = int(sys.argv[1]) p_list = [] def main(): main_start_time = datetime.datetime.utcnow() for _ in range(0, NUMBER_OF_TASKS): p = multiprocessing.Process(target=connect_to_url) p.start() p_list.append(p) for process_ in p_list: process_.join() main_finish_time = datetime.datetime.utcnow() tdelta = main_finish_time - main_start_time finish = time.perf_counter() with open("performance_data.txt", "a") as pf: pf.write(f"Started: {main_start_time}; Nprocesses: {NUMBER_OF_TASKS }; Elapsed time: {tdelta}; Nerrors: {ERR_COUNT} \r\n") def connect_to_url(): url = 'https://192.168.0.2/authentication/api/oauth2/token' auth = ('secret_name','secret_code') payload = { 'grant_type': 'password', 'username': 'secret_username', 'password': 'secret_password', } r = requests.post(url, auth=auth, data=payload, verify=False) _status_code = r.status_code if _status_code != 200: print(_status_code) err_log_name = main_start_time + "_error_log.txt" with open("./logs/{err_log_name}", "a") as pf: pf.write(f"Error: {_status_code} \r\n") if __name__ == '__main__': main()

Share in social media: