版本一
#!/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...