婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 深入理解python多線程編程

深入理解python多線程編程

熱門標簽:房產電銷外呼系統 南京銷售外呼系統軟件 315電話機器人廣告 蓋州市地圖標注 地圖標注的意義點 浙江電銷卡外呼系統好用嗎 地圖標注微信發送位置不顯示 地圖制圖標注位置改變是移位嗎 上海機器人外呼系統哪家好

進程

進程的概念:
進程是資源分配的最小單位,他是操作系統進行資源分配和調度運行的基本單位。通俗理解:一個正在運行的一個程序就是一個進程。例如:正在運行的qq、wechat等,它們都是一個進程。
進程的創建步驟
1.導入進程包
 import multiprocessing
2.通過進程類創建進程對象
 進程對象 = multiprocessing.Process()
3.啟動進程執行任務
 進程對象.start()

import multiprocessing
import time

def sing():
    for i in range(3):
        print("唱歌。。。")
        time.sleep(0.5)
def dance():
    for i in range(3):
        print("跳舞。。。")
        time.sleep(0.5)
if __name__ == '__main__':
    time1 = time.time()
    s1 = multiprocessing.Process(target=sing)
    d1 = multiprocessing.Process(target=dance)
    s1.start()
    d1.start()
    s1.join() #這個方法可以等待子進程結束后再繼續往下運行,通常用于進程間的同步
    d1.join()
    print(time.time()-time1)

帶有參數的進程

args元組,kwargs字典

import multiprocessing
import time

def sing(name, num):
    for i in range(num):
        print("%s在唱歌。。。"%name)
        time.sleep(0.5)
def dance(num):
    for i in range(num):
        print("跳舞。。。")
        time.sleep(0.5)
if __name__ == '__main__':
    # 以元組形式傳參
    s1 = multiprocessing.Process(target=sing, args=('小明', 3))
    # 以字典形式傳參
    d1 = multiprocessing.Process(target=dance, kwargs={"num": 5, })
    s1.start()
    d1.start()

進程的注意點

主進程會等待所有的子進程執行結束在結束

設置守護主進程

主進程結束后不會再繼續執行子進程中剩余的工作
work_process = multiprocessing.Process(target=work, daemon=True)

線程

線程的介紹

實現多任務的另一種形式
線程是程序執行的最小單位
同屬一個進程的多個線程共享進程所擁有的全部資源

線程的創建步驟
導入線程包
 import threading
通過線程類創建進程對象
 線程對象 = threading.Thread()
啟動線程執行任務
 線程對象.start()

優缺點對比

1.進程優缺點:
 優點:可以用多核,可以并行
 缺點:資源開銷大
2.線程優缺點:
 優點:資源開銷小
 缺點:不可用多核,依附于進程一個進程一個核

案例-多進程實現視頻文件夾多任務拷貝器

需求分析:
目標文件夾是否存在,如果不存在就創建,存在則不創建
遍歷源文件夾中所有文件,并拷貝到目標文件夾
采用進程實現多任務,并完成拷貝
實現步驟
定義源文件夾所在的路徑,目標文件夾所在路徑
創建目標文件夾
通過os.listdir獲取源目錄中的文件列表
遍歷每個文件,定義一個函數,專門實現文件拷貝
采用進程實現多任務,完成高并發拷貝

import os
import multiprocessing
def copy_file(file_name, source_dir, dest_dir):
    # 1 拼接源文件路徑和目標文件路徑
    source_path = source_dir + '\\' + file_name
    dest_path = dest_dir + '\\' + file_name
    # 2 打開源文件和目標文件
    with open(source_path, 'rb') as source_file:
        with open(dest_path, 'wb') as dest_file:
            # 3 循環讀取源文件到目標路徑
            while True:
                data = source_file.read(1024)
                if data:
                    dest_file.write(data)
                else:
                    break
if __name__ == '__main__':
    # 1 定義源文件夾和目標文件夾
    source_dir = r'E:\TCT\TIFF_tran\pos_1'
    dest_dir= r'F:\目標文件夾'

    # 2.創建目標文件夾
    try:
        os.mkdir(dest_dir)
    except:
        print("目標文件夾已經存在")
    # 3.讀取源文件夾的文件列表
    file_list = os.listdir(source_dir)
    # 4.遍歷文件列表實現拷貝
    for file_name in file_list:
        # copy_file(file_name, source_dir, dest_dir)
        # 5.使用多進程實現多任務拷貝
        sub_process = multiprocessing.Process(target=copy_file, args=(file_name, source_dir, dest_dir))
        sub_process.start()
#線程
import os
import threading
def copy_file(file_name, source_dir, dest_dir):
    # 1 拼接源文件路徑和目標文件路徑
    source_path = source_dir + '\\' + file_name
    dest_path = dest_dir + '\\' + file_name
    # 2 打開源文件和目標文件
    with open(source_path, 'rb') as source_file:
        with open(dest_path, 'wb') as dest_file:
            # 3 循環讀取源文件到目標路徑
            while True:
                data = source_file.read(1024)
                if data:
                    dest_file.write(data)
                else:
                    break
if __name__ == '__main__':
    # 1 定義源文件夾和目標文件夾
    source_dir = r'F:\迅雷下載\視頻-智能機器人從0到1系統入門課程\視頻'
    dest_dir= r'F:\目標文件夾'

    # 2.創建目標文件夾
    try:
        os.mkdir(dest_dir)
    except:
        print("目標文件夾已經存在")
    # 3.讀取源文件夾的文件列表
    file_list = os.listdir(source_dir)
    # 4.遍歷文件列表實現拷貝
    for file_name in file_list:
        # copy_file(file_name, source_dir, dest_dir)
        # 5.使用多線程實現多任務拷貝
        sub_thread = threading.Thread(target=copy_file, args=(file_name, source_dir, dest_dir))
        sub_thread.start()
   for file_name in file_list:
       sub_thread.join()
        sub_thread.join()#主線程等待所有線程結束才會結束

到此這篇關于python多線程編程的文章就介紹到這了,更多相關python多線程編程內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 分析Python感知線程狀態的解決方案之Event與信號量
  • 像線程一樣管理進程的Python multiprocessing庫
  • Python爬蟲之線程池的使用
  • Python多線程編程之threading模塊詳解
  • Python一些線程的玩法總結

標簽:陽泉 貴州 克拉瑪依 赤峰 日照 臨汾 金華 雙鴨山

巨人網絡通訊聲明:本文標題《深入理解python多線程編程》,本文關鍵詞  深入,理解,python,多,線程,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《深入理解python多線程編程》相關的同類信息!
  • 本頁收集關于深入理解python多線程編程的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 承德市| 铁岭市| 永和县| 长海县| 靖边县| 秦皇岛市| 宁夏| 都兰县| 临桂县| 霍山县| 新疆| 崇义县| 白玉县| 保亭| 丰原市| 云梦县| 宝应县| 凤台县| 宜州市| 建德市| 五莲县| 大连市| 麦盖提县| 社旗县| 思南县| 济阳县| 漳州市| 庄浪县| 海宁市| 岳阳市| 安仁县| 康平县| 临城县| 威海市| 乐清市| 夏邑县| 德安县| 德安县| 白银市| 南部县| 赤峰市|