国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

3種方式實現(xiàn)python多線程并發(fā)處理

Godtoy / 1731人閱讀

摘要:對于任務(wù)數(shù)量不端增加的程序,固定線程數(shù)量的線程池是必要的。方法二使用模塊主線程結(jié)束主線程結(jié)束方法三使用模塊參考分組線程池

標(biāo)簽: python奇淫技巧


最優(yōu)線程數(shù)

Ncpu=CPU的數(shù)量

Ucpu=目標(biāo)CPU使用率

W/C=等待時間與計算時間的比率

為保持處理器達(dá)到期望的使用率,最優(yōu)的線程池的大小等于
$$Nthreads=Ncpu*Ucpu*(1+W/C$$

cpu密集型任務(wù),即$W<

如果希望CPU利用率為100%,則$Nthreads=Ncpu$

IO密集型任務(wù),即系統(tǒng)大部分時間在跟I/O交互,而這個時間線程不會占用CPU來處理,即在這個時間范圍內(nèi),可以由其他線程來使用CPU,因而可以多配置一些線程。

混合型任務(wù),二者都占有一定的時間

線城池

對于任務(wù)數(shù)量不斷增加的程序,每有一個任務(wù)就生成一個線程,最終會導(dǎo)致線程數(shù)量的失控。對于任務(wù)數(shù)量不端增加的程序,固定線程數(shù)量的線程池是必要的。

方法一:使用threadpool模塊

threadpool是一個比較老的模塊了,支持py2 和 py3 。

import threadpool
import time

def sayhello (a):
    print("hello: "+a)
    time.sleep(2)

def main():
    global result
    seed=["a","b","c"]
    start=time.time()
    task_pool=threadpool.ThreadPool(5)
    requests=threadpool.makeRequests(sayhello,seed)
    for req in requests:
        task_pool.putRequest(req)
    task_pool.wait()
    end=time.time()
    time_m = end-start
    print("time: "+str(time_m))
    start1=time.time()
    for each in seed:
        sayhello(each)
    end1=time.time()
    print("time1: "+str(end1-start1))

if __name__ == "__main__":
    main(
方法二:使用concurrent.futures模塊
from concurrent.futures import ThreadPoolExecutor
import time

import time
from concurrent.futures import ThreadPoolExecutor, wait, as_completed

ll = []
def sayhello(a):
    print("hello: "+a)
    ll.append(a)
    time.sleep(0.8)

def main():
    seed=["a","b","c","e","f","g","h"]
    start1=time.time()
    for each in seed:
        sayhello(each)
    end1=time.time()
    print("time1: "+str(end1-start1))
    start2=time.time()
    with ThreadPoolExecutor(2) as executor:
        for each in seed:
            executor.submit(sayhello,each)
    end2=time.time()
    print("time2: "+str(end2-start2))

def main2():
    seed = ["a", "b", "c", "e", "f", "g", "h"]
    executor = ThreadPoolExecutor(max_workers=10)
    f_list = []
    for each in seed:
        future = executor.submit(sayhello, each)
        f_list.append(future)
    wait(f_list)
    print(ll)
    print("主線程結(jié)束")


def main3():
    seed = ["a", "b", "c", "e", "f", "g", "h"]
    with ThreadPoolExecutor(max_workers=2) as executor:
        f_list = []
        for each in seed:
            future = executor.submit(sayhello, each)
            f_list.append(future)
        wait(f_list,return_when="ALL_COMPLETED")
        print(ll)
        print("主線程結(jié)束")

if __name__ == "__main__":
    main3()
方法三:使用vthread模塊

參考:https://pypi.org/project/vthr...

demo1
import vthread
 
@vthread.pool(6)
def some(a,b,c):
    import time;time.sleep(1)
    print(a+b+c)
 
for i in range(10):
    some(i,i,i)
demo2:分組線程池
import vthread
pool_1 = vthread.pool(5,gqueue=1) # open a threadpool with 5 threads named 1
pool_2 = vthread.pool(2,gqueue=2) # open a threadpool with 2 threads named 2

@pool_1
def foolfunc1(num):
    time.sleep(1)
    print(f"foolstring1, test3 foolnumb1:{num}")

@pool_2
def foolfunc2(num):
    time.sleep(1)
    print(f"foolstring2, test3 foolnumb2:{num}")

@pool_2
def foolfunc3(num):
    time.sleep(1)
    print(f"foolstring3, test3 foolnumb3:{num}")

for i in range(10): foolfunc1(i)
for i in range(4): foolfunc2(i)
for i in range(2): foolfunc3(i)

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/42784.html

相關(guān)文章

  • python并發(fā)編程的思考

    摘要:我們以請求網(wǎng)絡(luò)服務(wù)為例,來實際測試一下加入多線程之后的效果。所以,執(zhí)行密集型操作時,多線程是有用的,對于密集型操作,則每次只能使用一個線程。說到這里,對于密集型,可以使用多線程或者多進(jìn)程來提高效率。 為了提高系統(tǒng)密集型運算的效率,我們常常會使用到多個進(jìn)程或者是多個線程,python中的Threading包實現(xiàn)了線程,multiprocessing 包則實現(xiàn)了多進(jìn)程。而在3.2版本的py...

    sshe 評論0 收藏0
  • Python基礎(chǔ)之使用期物處理并發(fā)

    摘要:本文重點掌握異步編程的相關(guān)概念了解期物的概念意義和使用方法了解中的阻塞型函數(shù)釋放的特點。一異步編程相關(guān)概念阻塞程序未得到所需計算資源時被掛起的狀態(tài)。 導(dǎo)語:本文章記錄了本人在學(xué)習(xí)Python基礎(chǔ)之控制流程篇的重點知識及個人心得,打算入門Python的朋友們可以來一起學(xué)習(xí)并交流。 本文重點: 1、掌握異步編程的相關(guān)概念;2、了解期物future的概念、意義和使用方法;3、了解Python...

    asoren 評論0 收藏0
  • 淺談Python線程

    摘要:進(jìn)程可創(chuàng)建多個線程來執(zhí)行同一程序的不同部分。就緒等待線程調(diào)度。運行線程正常運行阻塞暫停運行,解除阻塞后進(jìn)入狀態(tài)重新等待調(diào)度。消亡線程方法執(zhí)行完畢返回或者異常終止。多線程多的情況下,依次執(zhí)行各線程的方法,前頭一個結(jié)束了才能執(zhí)行后面一個。 淺談Python多線程 作者簡介: 姓名:黃志成(小黃)博客: 博客 線程 一.什么是線程? 操作系統(tǒng)原理相關(guān)的書,基本都會提到一句很經(jīng)典的話: 進(jìn)程...

    zsirfs 評論0 收藏0
  • python協(xié)程與golang協(xié)程的區(qū)別

    摘要:進(jìn)程線程和協(xié)程進(jìn)程的定義進(jìn)程,是計算機中已運行程序的實體。協(xié)程和線程的關(guān)系協(xié)程是在語言層面實現(xiàn)對線程的調(diào)度,避免了內(nèi)核級別的上下文消耗。和都引入了消息調(diào)度系統(tǒng)模型,來避免鎖的影響和進(jìn)程線程開銷大的問題。 進(jìn)程、線程和協(xié)程 進(jìn)程的定義: 進(jìn)程,是計算機中已運行程序的實體。程序本身只是指令、數(shù)據(jù)及其組織形式的描述,進(jìn)程才是程序的真正運行實例。 線程的定義: 操作系統(tǒng)能夠進(jìn)行運算調(diào)度的最小單...

    csRyan 評論0 收藏0
  • python大佬養(yǎng)成計劃----進(jìn)程、線程進(jìn)程

    摘要:在一個進(jìn)程內(nèi)部,要同時干多件事,就需要同時運行多個子任務(wù),我們把進(jìn)程內(nèi)的這些子任務(wù)稱為線程。總結(jié)一下,多任務(wù)的實現(xiàn)方式有三種多進(jìn)程模式多線程模式多進(jìn)程多線程模式線程是最小的執(zhí)行單元,而進(jìn)程由至少一個線程組成。 進(jìn)程與線程 很多同學(xué)都聽說過,現(xiàn)代操作系統(tǒng)比如Mac OS X,UNIX,Linux,Windows等,都是支持多任務(wù)的操作系統(tǒng)。 什么叫多任務(wù)呢?簡單地說,就是操作系統(tǒng)可以同時...

    taowen 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<