最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python異步多進程調度系統(tǒng)的完整實現(xiàn)與實戰(zhàn)指南

 更新時間:2025年11月17日 08:31:47   作者:東方佑  
本文將基于Python內(nèi)置的multiprocessing模塊,展示一個生產(chǎn)級別的多進程調度系統(tǒng)實現(xiàn),涵蓋進程池管理、進程間通信、實時監(jiān)控和結果持久化等核心功能,有需要的小伙伴可以了解下

1. 引言:Python多進程編程的價值

在當今數(shù)據(jù)密集型的應用場景中,高效處理并行任務是提升程序性能的關鍵。Python的全局解釋器鎖(GIL)限制了線程的并行執(zhí)行能力,使得多進程編程成為CPU密集型任務的首選方案。本文將深入探討如何構建一個功能完整的異步多進程調度系統(tǒng),實現(xiàn)任務分發(fā)、實時監(jiān)控和結果管理的一體化解決方案。

傳統(tǒng)的同步編程模型在處理大量I/O操作或計算任務時效率低下,而多進程技術可以充分利用多核CPU優(yōu)勢,顯著提升吞吐量。與多線程相比,多進程避免了GIL的限制,每個進程擁有獨立的Python解釋器和內(nèi)存空間,能夠實現(xiàn)真正的并行計算

本文將基于Python內(nèi)置的multiprocessing模塊,展示一個生產(chǎn)級別的多進程調度系統(tǒng)實現(xiàn),涵蓋進程池管理、進程間通信、實時監(jiān)控和結果持久化等核心功能。

2. 系統(tǒng)架構與設計原理

2.1 核心組件概述

我們的異步多進程調度系統(tǒng)采用模塊化設計,每個組件負責特定的功能領域:

  • 任務執(zhí)行器:負責具體業(yè)務的處理,支持異步執(zhí)行和超時控制
  • 結果存儲器:提供統(tǒng)一的結果存儲接口,支持內(nèi)存共享和文件持久化
  • 監(jiān)控器:實時跟蹤任務狀態(tài),提供進度統(tǒng)計和可視化反饋
  • 進程池管理器:優(yōu)化資源分配,控制并發(fā)進程數(shù)量

2.2 多進程基礎

Python的multiprocessing模塊通過創(chuàng)建獨立的子進程來規(guī)避GIL限制,每個子進程擁有自己的Python解釋器和內(nèi)存空間。與多線程相比,多進程更適合CPU密集型任務,但進程間通信成本較高,需要特殊機制實現(xiàn)數(shù)據(jù)交換。

# 基本的多進程創(chuàng)建示例
from multiprocessing import Process

def worker(task_id):
    print(f"處理任務 {task_id}")

if __name__ == '__main__':
    processes = []
    for i in range(3):
        p = Process(target=worker, args=(i,))
        processes.append(p)
        p.start()
    
    for p in processes:
        p.join()

系統(tǒng)采用Manager模式實現(xiàn)進程間數(shù)據(jù)共享,通過BaseManager創(chuàng)建的共享對象可以在多個進程間安全訪問。

3. 核心實現(xiàn)詳解

3.1 異步結果存儲機制

AsyncResultStorage類是系統(tǒng)的數(shù)據(jù)持久化核心,它采用雙存儲策略:內(nèi)存共享用于實時訪問,文件系統(tǒng)用于長期持久化。

class AsyncResultStorage:
    """異步結果存儲器"""
    
    def __init__(self, storage_file="async_results.json", manager=None):
        self.storage_file = storage_file
        # 使用傳入的manager創(chuàng)建共享列表和鎖
        if manager:
            self.results = manager.list()
            self.lock = manager.Lock()
        else:
            self.results = []
            self.lock = multiprocessing.Lock()

存儲機制的關鍵優(yōu)勢在于:

  • 線程安全:通過Lock確保并發(fā)寫入的數(shù)據(jù)一致性
  • 異步持久化:文件寫入操作不影響主任務執(zhí)行流程
  • 靈活查詢:支持按狀態(tài)篩選和統(tǒng)計信息生成

共享數(shù)據(jù)的管理需要特別注意同步問題,使用Lock可以避免競爭條件,確保數(shù)據(jù)完整性。

3.2 進程池管理與任務調度

系統(tǒng)采用ProcessPoolExecutor作為進程池管理引擎,相比原生的multiprocessing.Pool,它提供了更簡潔的API和更好的未來對象支持。

with ProcessPoolExecutor(max_workers=4) as executor:
    # 提交所有任務
    future_to_task = {
        executor.submit(send_request, task_id, status_queue, storage): task_id
        for task_id in range(num_tasks)
    }
    
    # 使用as_completed獲取完成的任務
    for future in as_completed(future_to_task):
        task_id = future_to_task[future]
        try:
            result = future.result(timeout=30)
        except Exception as e:
            logger.error(f"任務 {task_id} 執(zhí)行異常: {e}")

進程池的大小配置是性能調優(yōu)的關鍵因素。過多的進程會導致資源競爭,過少的進程無法充分利用CPU。實踐中,通常將進程數(shù)設置為CPU核心數(shù)或稍多。

3.3 實時監(jiān)控與進度跟蹤

監(jiān)控進程是系統(tǒng)的可視化核心,它通過多進程隊列實現(xiàn)與工作進程的通信。

def monitor_status(status_queue, total_tasks, storage):
    """增強的監(jiān)控函數(shù),支持實時統(tǒng)計和結果查詢"""
    completed = failed = 0
    start_time = time.time()
    
    while completed + failed < total_tasks:
        if not status_queue.empty():
            status_info = status_queue.get(timeout=1)
            # 更新進度狀態(tài)...
            
        # 進度條顯示邏輯
        progress = (completed + failed) / total_tasks
        bar_length = 30
        filled_length = int(bar_length * progress)
        bar = '█' * filled_length + '?' * (bar_length - filled_length)

監(jiān)控器提供以下關鍵功能:

  • 實時進度更新:每秒刷新進度條和統(tǒng)計信息
  • ETA預估:基于平均處理時間預測剩余時間
  • 異常警報:即時發(fā)現(xiàn)并報告失敗任務

進度可視化不僅提升用戶體驗,還能幫助開發(fā)者快速識別系統(tǒng)瓶頸,優(yōu)化任務分配策略。

4. 進程間通信與數(shù)據(jù)共享

4.1 隊列通信機制

系統(tǒng)使用Queue作為進程間通信橋梁,實現(xiàn)工作進程與監(jiān)控進程的解耦。

# 創(chuàng)建管理器共享隊列
manager = multiprocessing.Manager()
status_queue = manager.Queue()

# 工作進程發(fā)送狀態(tài)
status_queue.put({
    'task_id': task_id,
    'status': scenario['status'],
    'message': scenario['message'],
    'timestamp': datetime.now().isoformat()
})

Queue內(nèi)部使用管道和鎖機制,保證消息的順序傳遞線程安全。與Pipe相比,Queue支持多生產(chǎn)者和多消費者模式,更適合本系統(tǒng)的架構。

4.2 共享數(shù)據(jù)管理

Manager對象提供了一種高級共享數(shù)據(jù)解決方案,支持列表、字典、鎖等復雜數(shù)據(jù)結構的跨進程訪問。

# 使用Manager創(chuàng)建共享存儲
manager = multiprocessing.Manager()
storage = AsyncResultStorage(manager=manager)

# 多個進程可以安全訪問共享數(shù)據(jù)
with storage.lock:
    storage.results.append(new_result)

共享數(shù)據(jù)的訪問需要通過鎖機制進行同步,防止競態(tài)條件導致的數(shù)據(jù)不一致。本系統(tǒng)在AsyncResultStorage內(nèi)部封裝了鎖邏輯,簡化了使用復雜度。

5. 錯誤處理與容錯機制

5.1 異常捕獲與恢復

系統(tǒng)的容錯性能直接影響穩(wěn)定性,我們在多個層面實現(xiàn)異常處理:

def send_request(task_id, status_queue, storage):
    try:
        # 任務邏輯...
    except Exception as e:
        error_msg = f"任務 {task_id} 執(zhí)行異常: {str(e)}"
        logger.error(error_msg)
        
        # 存儲異常結果,確保不會丟失失敗記錄
        storage.add_result(
            task_id=task_id,
            status='Failed',
            message=error_msg,
            response_data=None
        )

異常處理策略包括:

  • 任務級隔離:單個任務失敗不影響整體進程池
  • 異常記錄:詳細記錄錯誤上下文便于調試
  • 優(yōu)雅降級:失敗任務跳過不影響后續(xù)處理

5.2 超時控制與資源管理

為避免任務無限阻塞,系統(tǒng)實現(xiàn)超時控制機制

# 任務執(zhí)行超時控制
for future in as_completed(future_to_task):
    try:
        result = future.result(timeout=30)  # 30秒超時
    except TimeoutError:
        logger.error("任務執(zhí)行超時")
        # 標記任務為失敗,釋放資源

超時機制配合進程池的自動清理功能,防止僵尸進程積累,確保系統(tǒng)長期穩(wěn)定運行。

6. 性能優(yōu)化與實踐建議

6.1 進程池配置優(yōu)化

根據(jù)任務特性調整進程池參數(shù)可以顯著提升性能

  • CPU密集型任務:進程數(shù)≈CPU核心數(shù)
  • I/O密集型任務:可適當增加進程數(shù)
  • 內(nèi)存限制:控制總進程數(shù)避免內(nèi)存溢出
# 根據(jù)任務類型動態(tài)調整進程數(shù)
if task_type == "cpu_intensive":
    workers = multiprocessing.cpu_count()
elif task_type == "io_intensive":
    workers = multiprocessing.cpu_count() * 2
else:
    workers = 4

6.2 內(nèi)存與資源管理

多進程環(huán)境下的資源管理尤為重要:

  • 數(shù)據(jù)序列化:進程間通信需要序列化數(shù)據(jù),控制傳輸量
  • 內(nèi)存共享:大型數(shù)據(jù)使用共享內(nèi)存減少拷貝開銷
  • 及時清理:顯式關閉進程釋放資源

系統(tǒng)使用with語句確保資源正確釋放,避免資源泄漏:

with ProcessPoolExecutor(max_workers=4) as executor:
    # 執(zhí)行任務...
# 池自動清理,無需手動調用shutdown

7. 實際應用場景擴展

本文的異步多進程調度系統(tǒng)可應用于多種場景:

7.1 大規(guī)模數(shù)據(jù)處理的實踐應用

  • 數(shù)據(jù)清洗與轉換:并行處理多個數(shù)據(jù)文件
  • Web爬蟲:并發(fā)請求提高采集效率
  • 模型推理:并行執(zhí)行多個預測任務

7.2 與分布式任務隊列的集成

對于更大規(guī)模的應用,可將系統(tǒng)與分布式任務隊列(如Celery)集成:

# 與Celery集成的示例
from celery import Celery

app = Celery('tasks', broker='redis://localhost:6379/0')

@app.task
def distributed_task(task_id):
    # 在分布式環(huán)境中執(zhí)行任務
    return send_request(task_id, status_queue, storage)

這種架構結合了多進程的高性能和分布式系統(tǒng)的可擴展性,適合超大規(guī)模任務處理。

8. 總結

本文詳細介紹了一個基于Python multiprocessing模塊的異步多進程調度系統(tǒng),涵蓋了從基礎概念到高級優(yōu)化的全方位內(nèi)容。系統(tǒng)具備以下特點:

  • 功能完整:集任務執(zhí)行、監(jiān)控、存儲于一體的解決方案
  • 穩(wěn)定可靠:全面的錯誤處理和資源管理機制
  • 易于擴展:模塊化設計支持功能定制和規(guī)模擴展
  • 用戶友好:實時進度反饋和詳細統(tǒng)計信息

多進程編程是Python高性能計算的重要技術,掌握它能夠讓開發(fā)者應對更復雜的計算場景。本文提供的實現(xiàn)方案既可直接用于生產(chǎn)環(huán)境,也可作為進一步學習多進程編程的基礎框架。

希望本文能幫助讀者深入理解Python多進程編程,并在實際項目中應用這些技術,提升應用性能和用戶體驗。

import multiprocessing
import requests
import time
import random
import json
import logging
from datetime import datetime, timedelta
from concurrent.futures import ProcessPoolExecutor, as_completed

# 配置日志
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)


class AsyncResultStorage:
    """異步結果存儲器"""

    def __init__(self, storage_file="async_results.json", manager=None):
        self.storage_file = storage_file
        # 使用傳入的manager創(chuàng)建共享列表和鎖,如果沒有提供manager則創(chuàng)建普通對象
        if manager:
            self.results = manager.list()
            self.lock = manager.Lock()
        else:
            self.results = []
            self.lock = multiprocessing.Lock()

    def add_result(self, task_id, status, message, response_data=None, timestamp=None):
        """添加結果到存儲(線程安全)"""
        if timestamp is None:
            timestamp = datetime.now().isoformat()

        result = {
            'task_id': task_id,
            'status': status,
            'message': message,
            'response_data': response_data,
            'timestamp': timestamp,
            'process_id': multiprocessing.current_process().pid
        }

        # 使用鎖確保線程安全
        with self.lock:
            self.results.append(result)

        # 異步寫入文件(實際應用中可替換為數(shù)據(jù)庫存儲)
        self._async_save_to_file(result)

        return result

    def _async_save_to_file(self, result):
        """異步保存結果到文件"""
        try:
            with open(self.storage_file, 'a', encoding='utf-8') as f:
                f.write(json.dumps(result, ensure_ascii=False) + '\n')
        except Exception as e:
            logger.error(f"保存結果到文件失敗: {e}")

    def get_results_by_status(self, status):
        """根據(jù)狀態(tài)篩選結果"""
        with self.lock:
            return [r for r in self.results if r['status'] == status]

    def get_statistics(self):
        """獲取統(tǒng)計信息"""
        with self.lock:
            total = len(self.results)
            completed = len([r for r in self.results if r['status'] == "Completed"])
            failed = len([r for r in self.results if r['status'] == "Failed"])

        return {
            'total_tasks': total,
            'completed': completed,
            'failed': failed,
            'success_rate': completed / total if total > 0 else 0
        }


def send_request(task_id, status_queue, storage):
    """改進的請求發(fā)送函數(shù),支持結果存儲"""
    logger.info(f"任務 {task_id} 開始執(zhí)行,進程ID: {multiprocessing.current_process().pid}")

    try:
        # 模擬不同的請求類型和參數(shù)
        request_types = ['GET', 'POST']
        request_type = random.choice(request_types)

        # 模擬請求延遲
        delay = random.uniform(0.5, 3.0)
        time.sleep(delay)

        # 模擬不同的響應情況
        response_scenarios = [
            {'status': 'Completed', 'message': '請求成功', 'data': {'score': random.randint(1, 100)}},
            {'status': 'Completed', 'message': '請求成功', 'data': {'result': 'ok'}},
            {'status': 'Failed', 'message': '請求超時', 'data': None},
            {'status': 'Failed', 'message': '服務器錯誤', 'data': None}
        ]

        scenario = random.choice(response_scenarios)

        # 存儲詳細結果
        storage.add_result(
            task_id=task_id,
            status=scenario['status'],
            message=scenario['message'],
            response_data=scenario['data']
        )

        # 通知狀態(tài)隊列(用于實時監(jiān)控)
        status_queue.put({
            'task_id': task_id,
            'status': scenario['status'],
            'message': scenario['message'],
            'timestamp': datetime.now().isoformat()
        })

        logger.info(f"任務 {task_id} 完成,狀態(tài): {scenario['status']}")

        return scenario['status']

    except Exception as e:
        error_msg = f"任務 {task_id} 執(zhí)行異常: {str(e)}"
        logger.error(error_msg)

        # 存儲異常結果
        storage.add_result(
            task_id=task_id,
            status='Failed',
            message=error_msg,
            response_data=None
        )

        status_queue.put({
            'task_id': task_id,
            'status': 'Failed',
            'message': error_msg,
            'timestamp': datetime.now().isoformat()
        })

        return 'Failed'


def format_time_delta(seconds):
    """格式化時間差"""
    if seconds < 60:
        return f"{seconds:.1f}s"
    elif seconds < 3600:
        minutes = seconds / 60
        return f"{minutes:.1f}m"
    else:
        hours = seconds / 3600
        return f"{hours:.1f}h"


def monitor_status(status_queue, total_tasks, storage):
    """增強的監(jiān)控函數(shù),支持實時統(tǒng)計和結果查詢"""
    completed = failed = 0
    last_report_time = time.time()
    start_time = time.time()
    
    # 進度條相關變量
    last_progress_update = time.time()

    logger.info(f"監(jiān)控進程啟動,共監(jiān)控 {total_tasks} 個任務")

    while completed + failed < total_tasks:
        try:
            # 非阻塞獲取狀態(tài)信息
            if not status_queue.empty():
                status_info = status_queue.get(timeout=1)
                task_id = status_info['task_id']

                print(
                    f"[{status_info['timestamp']}] 任務 {task_id} 狀態(tài): {status_info['status']} - {status_info['message']}")

                if status_info['status'] == "Completed":
                    completed += 1
                elif status_info['status'] == "Failed":
                    failed += 1
                    
                # 更新進度條顯示
                current_time = time.time()
                if current_time - last_progress_update >= 1:  # 每秒更新一次進度條
                    processed_tasks = completed + failed
                    progress = processed_tasks / total_tasks
                    percentage = progress * 100
                    
                    # 計算 ETA
                    elapsed_time = current_time - start_time
                    if processed_tasks > 0:
                        avg_time_per_task = elapsed_time / processed_tasks
                        remaining_tasks = total_tasks - processed_tasks
                        eta_seconds = avg_time_per_task * remaining_tasks
                        eta_formatted = format_time_delta(eta_seconds)
                        avg_time_formatted = format_time_delta(avg_time_per_task)
                    else:
                        eta_formatted = "未知"
                        avg_time_formatted = "未知"
                    
                    # 顯示進度條
                    bar_length = 30
                    filled_length = int(bar_length * progress)
                    bar = '█' * filled_length + '?' * (bar_length - filled_length)
                    
                    print(f"\r進度: |{bar}| {percentage:.1f}% 完成 ({processed_tasks}/{total_tasks}), "
                          f"平均耗時: {avg_time_formatted}, ETA: {eta_formatted}", end='', flush=True)
                    last_progress_update = current_time

            else:
                time.sleep(0.1)  # 短暫休眠避免忙等待

            # 每5秒報告一次統(tǒng)計信息
            current_time = time.time()
            if current_time - last_report_time >= 5:
                stats = storage.get_statistics()
                logger.info(
                    f"任務進度: {completed + failed}/{total_tasks} "
                    f"(成功: {stats['completed']}, 失敗: {stats['failed']}, "
                    f"成功率: {stats['success_rate']:.2%})"
                )
                last_report_time = current_time

        except Exception as e:
            logger.error(f"監(jiān)控進程異常: {e}")
            time.sleep(1)  # 異常時休眠1秒

    # 最終統(tǒng)計報告
    final_stats = storage.get_statistics()
    total_elapsed_time = time.time() - start_time
    print()  # 換行
    logger.info(f"所有任務執(zhí)行完成!總耗時: {total_elapsed_time:.2f} 秒, 最終統(tǒng)計: {final_stats}")


def result_query_handler(storage):
    """結果查詢處理器(可擴展為API接口)"""

    def get_results(status=None, limit=None):
        with storage.lock:
            results = list(storage.results)  # 轉換為普通列表

        if status:
            results = [r for r in results if r['status'] == status]

        if limit:
            results = results[:limit]

        return results

    return get_results


def main_enhanced():
    """增強的主調度函數(shù)"""
    num_tasks = 10  # 增加任務數(shù)量以更好測試異步性能
    
    # 使用Manager創(chuàng)建可以在進程間共享的隊列和鎖
    manager = multiprocessing.Manager()
    status_queue = manager.Queue()

    # 創(chuàng)建共享存儲實例,傳入manager以便創(chuàng)建可共享的對象
    storage = AsyncResultStorage(manager=manager)

    logger.info("啟動異步多進程調度系統(tǒng)...")
    logger.info(f"總共 {num_tasks} 個任務需要執(zhí)行")
    start_time = time.time()

    # 啟動監(jiān)控進程
    monitor_process = multiprocessing.Process(
        target=monitor_status,
        args=(status_queue, num_tasks, storage)
    )
    monitor_process.start()

    # 使用ProcessPoolExecutor以獲得更好的進程管理
    with ProcessPoolExecutor(max_workers=4) as executor:
        # 提交所有任務
        future_to_task = {
            executor.submit(send_request, task_id, status_queue, storage): task_id
            for task_id in range(num_tasks)
        }

        # 等待所有任務完成(可選,因為監(jiān)控進程會跟蹤完成狀態(tài))
        completed_futures = 0
        for future in as_completed(future_to_task):
            task_id = future_to_task[future]
            try:
                result = future.result(timeout=30)  # 設置超時時間
                completed_futures += 1
            except Exception as e:
                logger.error(f"任務 {task_id} 執(zhí)行出現(xiàn)異常: {e}")

    # 等待監(jiān)控進程結束
    monitor_process.join(timeout=10)
    if monitor_process.is_alive():
        logger.warning("監(jiān)控進程未正常結束,強制終止")
        monitor_process.terminate()

    # 計算執(zhí)行時間
    total_time = time.time() - start_time

    # 輸出最終結果和統(tǒng)計信息
    stats = storage.get_statistics()
    logger.info(f"系統(tǒng)執(zhí)行完成,總耗時: {total_time:.2f} 秒")
    logger.info(f"最終統(tǒng)計: 共{stats['total_tasks']}個任務, "
                f"成功{stats['completed']}個, 失敗{stats['failed']}個, "
                f"成功率: {stats['success_rate']:.2%}")

    # 返回結果查詢接口
    return result_query_handler(storage)


if __name__ == "__main__":
    # 使用Manager創(chuàng)建可以在進程間共享的對象
    manager = multiprocessing.Manager()
    
    # 創(chuàng)建測試存儲文件
    test_storage_file = f"async_results_{int(time.time())}.json"
    storage = AsyncResultStorage(test_storage_file, manager)

    # 運行增強版系統(tǒng)
    query_handler = main_enhanced()

    # 示例:查詢執(zhí)行結果
    print("\n=== 執(zhí)行結果查詢 ===")
    all_results = query_handler()
    completed_results = query_handler(status="Completed")
    failed_results = query_handler(status="Failed")

    print(f"總任務數(shù): {len(all_results)}")
    print(f"成功任務: {len(completed_results)}")
    print(f"失敗任務: {len(failed_results)}")

    # 顯示最近3個任務的結果
    print("\n最近3個任務的結果:")
    for result in all_results[-3:]:
        print(f"  任務 {result['task_id']}: {result['status']} - {result['message']}")

到此這篇關于Python異步多進程調度系統(tǒng)的完整實現(xiàn)與實戰(zhàn)指南的文章就介紹到這了,更多相關Python異步多進程調度內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python輸出PowerPoint(ppt)文件中全部文字信息的方法

    Python輸出PowerPoint(ppt)文件中全部文字信息的方法

    這篇文章主要介紹了Python輸出PowerPoint(ppt)文件中全部文字信息的方法,涉及Python通過windows中com組件操作ppt的相關技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • 基于Python實現(xiàn)本地音樂播放器的制作

    基于Python實現(xiàn)本地音樂播放器的制作

    這篇文章主要介紹了如何利用Python實現(xiàn)本地音樂播放器的制作,并且可以選擇需要播放的音樂的路徑,選擇播放方式,感興趣的小伙伴可以了解一下
    2022-06-06
  • PyCharm 2020.2.2 x64 下載并安裝的詳細教程

    PyCharm 2020.2.2 x64 下載并安裝的詳細教程

    這篇文章主要介紹了PyCharm 2020.2.2 x64 下載并安裝的詳細教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • python實現(xiàn)json文件的增刪改操作方法

    python實現(xiàn)json文件的增刪改操作方法

    這篇文章主要介紹了python實現(xiàn)json文件的增刪改操作,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-06-06
  • Python中文件操作簡明介紹

    Python中文件操作簡明介紹

    這篇文章主要介紹了Python中文件操作簡明介紹,本文講解了打開文件、讀取方法、寫入方法、文件內(nèi)移動、文件迭代、關閉文件、截取文件等內(nèi)容,并給出了一個完整操作實例,需要的朋友可以參考下
    2015-04-04
  • python BitMap算法處理20億隨機整數(shù)去重

    python BitMap算法處理20億隨機整數(shù)去重

    這篇文章主要為大家介紹了python BitMap算法處理20億隨機整數(shù)去重,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • 在Python中去除列表重復項并保留順序的四種方法

    在Python中去除列表重復項并保留順序的四種方法

    在?Python?編程中,列表(list)是一種常用的數(shù)據(jù)結構,但有時列表中會出現(xiàn)重復項,這可能會影響程序的執(zhí)行效率或導致錯誤結果,本文將為你詳細介紹如何去除列表中的重復項,并保留元素的原始順序,需要的朋友可以參考下
    2026-01-01
  • Python+Pygame實現(xiàn)神廟逃亡游戲

    Python+Pygame實現(xiàn)神廟逃亡游戲

    這篇文章主要為大家介紹了如何利用Python和Pygame動畫制作一個神廟逃亡類似的小游戲。文中的示例代碼講解詳細,感興趣的小伙伴可以動手嘗試一下
    2022-05-05
  • opencv之為圖像添加邊界的方法示例

    opencv之為圖像添加邊界的方法示例

    這篇文章主要介紹了opencv之為圖像添加邊界的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • python學習print中format的用法示例

    python學習print中format的用法示例

    這篇文章主要為大家介紹了python學習print中format的用法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03

最新評論

庆云县| 尼玛县| 皮山县| 绩溪县| 卢湾区| 巴塘县| 富川| 依兰县| 章丘市| 枣强县| 嘉兴市| 建宁县| 绥德县| 昌吉市| 海盐县| 招远市| 潜江市| 石阡县| 张家口市| 郯城县| 靖安县| 铜鼓县| 辛集市| 海伦市| 杂多县| 陕西省| 大渡口区| 林周县| 靖江市| 运城市| 聂拉木县| 博乐市| 驻马店市| 海安县| 博野县| 师宗县| 长治县| 普兰店市| 菏泽市| 南澳县| 五大连池市|