Python筆記 五 Python執行緒池

2021-06-29 15:41:53 字數 1639 閱讀 4944

目前專案中有個工作是使用python定時處理資料庫中的任務,之前是每個任務都起乙個執行緒進行處理,隨著任務數的增多,起的執行緒也越來越多,最終出現記憶體溢位情況。

#python的執行緒池實現

import queue

import threading

import sys

import time

import urllib

import log

#替我們工作的執行緒池中的執行緒

class mythread(threading.thread):

def __init__( workqueue, timeout=30, **kwargs):

threading.thread.__init__( kwargs=kwargs)

#執行緒在結束前等待任務佇列多長時間

timeout = timeout

setdaemon(true)

workqueue = workqueue

start()

def run(self):

while true:

try:

#從工作佇列中獲取乙個任務

callable, args, kwargs = workqueue.get(timeout = timeout)

#我們要執行的任務

callable(args, kwargs)

#任務佇列空的時候結束此執行緒

except queue.empty:

break

except :

print sys.exc_info()

raise

class threadpool:

def __init__( num_of_threads=10):

workqueue = queue.queue()

threads =

__createthreadpool( num_of_threads )

def __createthreadpool( num_of_threads ):

for i in range( num_of_threads ):

thread = mythread( workqueue )

def wait_for_complete():

#等待所有執行緒完成。

while len(threads):

thread = threads.pop()

#等待執行緒結束

if thread.isalive():#判斷執行緒是否還存活來決定是否呼叫join

thread.join()

def add_job( callable, *args, **kwargs ):

workqueue.put( (callable,args,kwargs) )

def main():

threadpool = threadpool(10)

for task in tasklist:

threadpool.add_job(task, *args, **kwargs)

threadpool.wait_for_complete()

if __name__ == '__main__':

main()

python學習筆記(五)

python裡的流程控制語句 if expression statements s else statements s identationerror 縮排錯誤,縮排4個空格 true 非空的值 string,tuple,list,set,dict false 0,null,其他空值 需要多次判斷使...

python 學習筆記 (五)

遞迴函式,如果乙個函式在內部呼叫自身本身,這個函式就是遞迴函式。該包下的iterable方法是用來判斷物件是否可以迭代 from collections import iterable 遞迴算階乘 def fact n if n 1 return 1 return n fact n 1 print ...

Python學習筆記(五)

set set 持有一系列元素,這一點和 list 很像,但是set的元素沒有重複,而且是無序的,這點和 dict 的 key很像。建立 呼叫 set 並傳入乙個 list,list的元素將作為set的元素 s set a b c set會自動去掉重複的元素。訪問 由於set儲存的是無序集合,所以我...