Python multi-threading dan multi-process: analisis kes praktikal, kuasai kemahiran aplikasi pengaturcaraan serentak

WBOY
Lepaskan: 2024-02-25 09:13:36
ke hadapan
451 orang telah melayarinya

Python 多线程与多进程:实战案例剖析,掌握并发编程的应用技巧

1. python berbilang benangdan gambaran keseluruhan berbilang proses

1. Pelbagai benang

Multiple Threads ialah teknologi pengaturcaraan serentak yang membolehkan program melakukan pelbagai tugas pada masa yang sama. Dalam Python, anda boleh menggunakan modul benang untuk mencipta dan mengurus benang. Benang berkongsi ruang memori program, jadi data boleh dikongsi dengan mudah. Walau bagaimanapun, pengaturcaraan berbilang benang juga mempunyai beberapa cabaran, seperti isu keselamatan dan isu kunci mati.

2. Pelbagai proses

Pemprosesan berbilang ialah teknik pengaturcaraan konkurensiyang membolehkan program melaksanakan pelbagai tugas serentak. Dalam Python, anda boleh menggunakan modul multiprocessing untuk mencipta dan mengurus proses. Proses ini adalah bebas daripada ruang memori program, jadi tiada isu keselamatan benang. Walau bagaimanapun, pengaturcaraan berbilang proses juga memberikan beberapa cabaran, seperti komunikasi antara proses dan isu penyegerakan.

2. Kes Praktikal 1: Menggunakan berbilang benang untuk mempercepatkan pemprosesan imej

Keperluan: Terdapat folder yang mengandungi 1000 imej, dan setiap imej perlu diproses, termasuk mengubah saiz, mengasah dan menambah tera air.

Penyelesaian:Multi-threading boleh digunakan untuk mempercepatkan pemprosesan imej. Langkah-langkah khusus adalah seperti berikut:

  1. Pertama, simpan senarai fail imej dalam senarai.
  2. Kemudian, gunakan modul benang untuk mencipta kolam benang.
  3. Seterusnya, tetapkan tugas pemprosesan imej kepada benang dalam kumpulan benang.
  4. Akhir sekali, selepas menunggu semua utas menyelesaikan tugasan mereka, simpan imej yang diproses ke fail.

Dengan menggunakan multi-threading, masa pemprosesan imej dapat dikurangkan dengan banyaknya.

import threading
import os
from PIL import Image, ImageFilter

def process_image(image_path):
image = Image.open(image_path)
image = image.resize((256, 256))
image = image.filter(ImageFilter.SHARPEN)
image.save(image_path)

def main():
# 获取图像文件列表
image_files = os.listdir("images")

# 创建线程池
pool = ThreadPool(4)

# 将图像处理任务分配给线程池
for image_file in image_files:
pool.submit(process_image, ("images/" + image_file, ))

# 等待所有线程完成任务
pool.close()
pool.join()

if __name__ == "__main__":
main()
Salin selepas log masuk

3 Kes Praktikal 2: Menggunakan pelbagai proses untuk mempercepatkan pengkomputeran saintifik

Keperluan: Pengiraan saintifik perlu dilakukan, melibatkan sejumlah besar pengiraan titik terapung.

Penyelesaian:Pelbagai proses boleh digunakan untuk mempercepatkan pengiraan saintifik. Langkah-langkah khusus adalah seperti berikut:

  1. Pertama, pecahkan tugas pengkomputeran saintifik kepada berbilang subtugas.
  2. Kemudian, gunakan modul multiprocessing untuk mencipta kumpulan proses.
  3. Seterusnya, tetapkan subtugas kepada proses dalam kumpulan proses.
  4. Akhir sekali, tunggu semua proses menyelesaikan tugasan mereka dan kemudian rumuskan hasil subtugas.

Dengan menggunakan pelbagai proses, masa pengiraan saintifik boleh dipendekkan dengan banyak.

import multiprocessing
import math

def compute_pi(n):
result = 0
for i in range(n):
result += 4 * (-1)**i / (2*i + 1)
return result

def main():
# 分解科学计算任务
n = 100000000
num_processes = 4
sub_tasks = [n // num_processes] * num_processes

# 创建进程池
pool = multiprocessing.Pool(num_processes)

# 将子任务分配给进程池
results = pool.map(compute_pi, sub_tasks)

# 等待所有进程完成任务
pool.close()
pool.join()

# 汇总子任务的结果
pi = sum(results)

print("π =", pi)

if __name__ == "__main__":
main()
Salin selepas log masuk

IV Ringkasan

Melalui dua kes praktikal di atas, kami telah melihat kuasa berkuasa berbilang benang dan berbilang proses dalam pengaturcaraan serentak. Dalam pembangunan sebenar, kita boleh memilih teknologi pengaturcaraan serentak yang sesuai mengikut keperluan khusus.

Atas ialah kandungan terperinci Python multi-threading dan multi-process: analisis kes praktikal, kuasai kemahiran aplikasi pengaturcaraan serentak. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:lsjlt.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan