Python之路 執行緒池

2022-02-15 08:23:57 字數 2920 閱讀 5866

版本一

#!/usr/bin/env  python

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

import queue

import threading

class threadpool(object):

#建立類

def__init__(self, max_num=20):#

程序函式,預設最大20個程序

self.queue = queue.queue(max_num)#

生成程序

for i in xrange(max_num):#

迴圈程序

self.queue.put(threading.thread)#

上傳程序

def get_thread(self):#

return self.queue.get()

def add_thread(self):#

生成程序函式

self.queue.put(threading.thread)

pool = threadpool(10)#

執行類,並傳預設程序數值

def func(arg, p):#

列印程序

print arg

import time

time.sleep(2)#

間隔2秒

p.add_thread()

for i in xrange(30):#

迴圈程序

thread = pool.get_thread()

t = thread(target=func, args=(i, pool))#

傳值到func函式,並且執行

t.start()

版本二from queue import queue

import contextlib

import threading

workerstop = object()

class threadpool:

workers = 0

threadfactory = threading.thread

currentthread = staticmethod(threading.currentthread)

def __init__(self, maxthreads=20, name=none):

self.q = queue(0)

self.max = maxthreads

self.name = name

self.waiters = 

self.working = 

def start(self):

while self.workers <

min(self.max, self.q.qsize()+len(self.working)):

self.startaworker()

def startaworker(self):

self.workers +

= 1name 

= "poolthread-%s-%s"

% (self.name or id(self), self.workers)

newthread 

= self.threadfactory(target=self._worker, 

name

=name)

newthread.start()

def callinthread(self, func, *args, **kw):

self.callinthreadwithcallback(none, func, *args, **kw)

def callinthreadwithcallback(self, onresult, func, *args, **kw):

o = (func, 

= self.currentthread()

o = self.q.get()

while o is not workerstop:

with self._workerstate(self.working, ct):

function, args, kwargs, onresult 

= odel o

try:

result 

= function(*args, 

**kwargs)

success 

= true

except:

success 

= false

if onresult is none:

pass

else:

pass

del function, args, kwargs

if onresult is not none:

try:

onresult(success, result)

except:

#context.call(ctx, log.err)

pass

del onresult, result

with self._workerstate(self.waiters, ct):

o = self.q.get()

def stop(self):

while self.workers:

self.q.put(workerstop)

self.workers -

= 1"""

def show(arg):

import time

time.sleep(1)

print arg

pool 

= threadpool(20)

for i in range(500):

pool.callinthread(show, i)

pool.start()

pool.stop()

"""

Java 學習之路 執行緒1

自己練習了一下執行緒同步的例項 package com.lcq.threadtest 類名 threadtext4 功能 用於測試多執行緒的同步問題以及解決方法 第乙個執行緒執行後就被加上鎖,只有執行完成之後其他執行緒才能執行 用synchronized關鍵字實現同步 version 1.0 aut...

java自學之路 執行緒(2)

兩個練習執行緒的例子 有乙個資源類,裡面有100張票要賣出,有賣票的方法 class ticket implements runnablecatch exception e if ticket 0 sell else return public void sell 建立三個執行緒執行買票任務 pub...

架構師之路 執行緒

執行緒安全概念 當多個執行緒訪問同乙個類時,這個類始終能保持正確的行為,那麼這個類 物件或方法 就是執行緒安全的。synchronized 可以在任意物件或方法上加鎖,加鎖的這段 被稱為 互斥區 或 臨界區 package com.daniu56.thread suppresswarnings un...