1. 程式人生 > >python multiprocessing dummy Pool 使用

python multiprocessing dummy Pool 使用

本文內容:

  • python multiprocessing.dummy Pool多執行緒、程序任務佇列使用
  • http壓力測試簡單示例

工作中有個常用的場景,比如現在需要下載10W張圖片,我們不可能寫個for迴圈一張一張的下載吧,又或者是我們做個簡單的HTTP壓力測試肯定是要使用多個,程序或者執行緒去做(每個請求handler,會有一個引數(所有的引數生成一個佇列))然後把handler和佇列map到Pool裡面。肯定要用多執行緒或者是多程序,然後把這100W的佇列丟給執行緒池或者程序池去處理在python中multiprocessing Pool程序池,以及multiprocessing.dummy非常好用,一般:

  • from multiprocessing import Pool as ProcessPool
  • from multiprocessing.dummy import Pool as ThreadPool

前者是多個程序,後者使用的是執行緒,之所以dummy(中文意思“假的”)
下面給出一個簡單的http壓力測試示例:

# _*_ coding:utf-8 _*_

"""
This file a sample demo to do http stress test
"""
import requests
import time
from multiprocessing.dummy import
Pool as ThreadPool import urllib def get_ret_from_http(url): """cited from https://stackoverflow.com/questions/645312/what-is-the-quickest-way-to-http-get-in-python """ ret = requests.get(url) print ret.content # eg. result: {"error":false,"resultMap":{"check_ret":1},"success":true}
def multi_process_stress_test(): """ start up 4 thread to issue 1000 http requests to server and test consume time :return: """ start = time.time() # 實際中url帶引數的一般使用下面的make_url函式生成,這裡示例就不用(前面寫的現在懶得改了) url = """http://127.0.0.1:9325/shortvideo/checkBlack?url=http%3A%2F%2Fzbasecapture.bs2.yy.com%2F42269159_1499248536403_3.jpg&serial=abcdddddddd""" # generate task queue list lst_url = [url, url1]*50 # use 5 threads pool = ThreadPool(5) # task and handles to pool ret = pool.map(get_ret_from_http, lst_url) pool.close() pool.join() print 'time consume %s' % (time.time() - start) def make_url(): """ generate url with parameter https://xy.com/index.php? url=http%3A//xy.xxx.com/22.jpg&SecretId=xy_123_move cited from https://stackoverflow.com/questions/2506379/add-params-to-given-url-in-python https://github.com/gruns/furl a good util for url operator :return: """ para = {"SecretId": "xy_123_move", "url": "http://xy.xxx.com/22.jpg"} print urllib.urlencode(para) #url=http%3A%2F%2Fxy.xxx.com%2F22.jpg&SecretId=xy_123_move base_url = 'xy.com/index.php' return 'https://%s?%s' % (base_url, '&'.join('%s=%s' % (k, urllib.quote(str(v))) for k, v in para.iteritems())) if __name__ == '__main__': # get_ret_from_http() multi_process_stress_test() # print make_url() pass

下面在給出另一個簡單的示例,handler函式每次睡眠隨機的秒數(根據指定的引數),我們可以選擇使用程序或者是執行緒來完成佇列中所有的任務(一般CPU密集型的選擇用多程序,IO密集型的可以選擇多執行緒)

# _*_ coding:utf-8 _*_
"""
This file is about thread(dummy)/process pool
"""
from multiprocessing import Pool as ProcessPool
from multiprocessing.dummy import Pool as ThreadPool
import logging
from time import sleep, time
from random import randrange

logging.basicConfig(level=logging.DEBUG,
                    format='%(levelname)s %(asctime)s %(processName)s %(message)s',
                    datefmt='%Y-%m-%d %I:%M:%S')


def handler(sec):
    logging.debug('now I will sleep %s S', sec)
    sleep(sec)


def get_pool(b_dummy=True, num=4):
    """
    if b_dummy is True then get ThreadPool, or get process pool
    :param b_dummy: dummy thread Pool or Process pool
    :param num: thread or process num
    :return: pool object
    """
    if b_dummy:
        pool = ThreadPool(num)
    else:
        pool = ProcessPool(num)

    return pool


def test_dummy_thread_pool():
    start_time = time()
    # generate task queue parameters lists
    lst_sleep_sec = [randrange(3, 10) for i in xrange(10)]
    pool = get_pool(b_dummy=False)

    results = pool.map(handler, lst_sleep_sec)
    logging.debug(results)
    pool.close()
    pool.join()
    logging.debug('time consume %s', time() - start_time)
    pass


if __name__ == '__main__':
    test_dummy_thread_pool()
    pass

工作中使用的語言比較多寫過C++,java, 部分html+js, python的.由於用到語言的間歇性,比如還幾個月沒有使用python了許多技巧就忘記了,於是我把一些常用的python程式碼分類專案在本人的github中,當實際中用到某一方法的時候就把常用的方法放到一個檔案中方便查詢。

相關推薦

python multiprocessing dummy Pool 使用

本文內容: python multiprocessing.dummy Pool多執行緒、程序任務佇列使用 http壓力測試簡單示例 工作中有個常用的場景,比如現在需要下載10W張圖片,我們不可能寫個for迴圈一張一張的下載吧,又或者是我們做個簡單的HTT

python multiprocessing.Pool 中map、map_async、apply、apply_async的區別

pen pool arm res 區別 col apply rgs pytho   multiprocessing是python的多進程庫,multiprocessing.dummy則是多線程的版本,使用都一樣。   其中都有pool池的概念,進程池/線程池有共同的方法,其

記錄python multiprocessing Pool的map和apply_async方法

遇到的問題 在學習python多程序時,程序上執行的方法接收多個引數和多個結果時遇到了問題,現在經過學習在這裡總結一下 Pool.map()多引數任務 在給map方法傳入帶多個引數的方法不能達到預期的效果,像下面這樣 def job(x ,y): return

pythonmultiprocessingmultiprocessing.dummy和threading用法筆記

一、multiprocessing 用法參考地址:multiprocessing用法 首先解釋一個誤區: 程序池的大小是每次同時執行的程序數,但是並不會影響主程序申請程序的數量。主程序申請多程序量不等於池子大小。 1、子程序無返回值 # -*- coding:u

Python multiprocessing.Pool: when to use apply, apply_async or map?

Back in the old days of Python, to call a function with arbitrary arguments, you would use apply: apply(f,args,kwargs) apply still exists in Python2.7

python multiprocessing example

utf center proc thread manager track enter sta ddr python multiprocessing exampleServer Code:#!/usr/bin/python #-*- coding: UTF-8 -*-

python-multiprocessing模塊

start 模塊 def 進程 -m 資源 get hello multi 由於GIL的存在,python中的多線程其實並不是真正的多線程,如果想要充分使用多核CPU的資源,在python中大部分情況使用多進程。 from multiprocessing import

python multiprocessing深度解析

desc not task The 釋放 結果 cal art destroy 在寫pythond多線程代碼的時候,會用到multiprocessing這個包,這篇文章總結了一些這個包在多進程管理方面的一些原理和代碼分析。 1. 問題一:是否需要顯式調用pool的

Python multiprocessing (多程序)使用

官方文件 https://docs.python.org/3.6/library/multiprocessing.html from multiprocessing import Pool, Manager import time, random, os # 需要執行的函式 def f

python語法——使用Pool實現多程序並行

簡介 Pool 模組來自於 multiprocessing 模組。 multiprocessing 模組是跨平臺版本的多程序模組,像執行緒一樣管理程序,與 threading 很相似,對多核CPU的利用率會比 threading 好的多。 Pool 類可以提供指定數

python技巧——使用Pool實現多程序並行

簡介 可以使用 Pool來實現多程序並行。 Pool 模組來自於 multiprocessing 模組。 multiprocessing 模組是跨平臺版本的多程序模組,像執行緒一樣管理程序,與 threading 很相似,對多核CPU的利用率會比 threading

python程序池Pool的apply與apply_async到底怎麼用?

背景 最近在解決問題的時候遇到了上下文衝突的問題,不得不用多程序來解決這個問題。這個問題是StackOverflow沒有完整答案的問題,下一篇部落格進行介紹。 多程序 python中使用multiprocessing模組實現多程序。multiprocessing模組提供了一個

Python multiprocessing 多程序鎖 程序間傳遞Lock 遇到的問題

無法傳遞 Lock物件 from multiprocessing import Pool,Lock def text(i,lock): print(i) lock.acquire() DOSOMETHING lock.release() if __na

Python multiprocessing.Process

multiprocessing.Process multiprocessing是python的中的一個多程序管理庫,multiprocessing.Process模組用於建立程序 使用方法: Process(target=, args=) target 要執行的

python multiprocessing程序執行自定義的函式,然後又返回結果

#coding=utf-8 import multiprocessing def test(strr): i = strr return i if __name__ == '__m

python 多程序pool.apply_async 在報錯 AttributeError: Can't get attribute 'task' on __main__' (built-in)>

在用pycharm跑多程序的時候,不知道為什麼總是報一個錯誤: Process SpawnPoolWorker-21: Traceback (most recent call last): Fi

[Python]Multiprocessing vs Threading Python

問題的地址: http://stackoverflow.com/questions/3044580/multiprocessing-vs-threading-python #大多隻是曉得意思,翻譯起來真是感覺無力,歡迎吐槽指正。 問題: 我想知道multiprocessing比threading模組有哪些

python:multiprocessing 在windows中的使用:RuntimeError:

RuntimeError:          An attempt has been made to start a new process before the         current process has finished its bootstrapping

Python-multiprocessing程序管理

multiprocessing模組包含一個API,它基於threading API可以在多個程序間劃分工作。有些情況下,multiprocessing可以作為臨時替換,取代threading來利用多個CPU核心,避免全域性直譯器鎖帶來的效能瓶頸。 1. multiproce

Python multiprocessing 使用手記[1] – 程序模型

原文: 首先從multiprocessing的程序模型開始看。 multiprocessing的目的是建立一個介面和python.threading 類似介面的庫,用多程序的方式來併發處理。因此建立一個新的程序的的方法也 和python.threading很像: imp