#coding:utf-8
import
threading
import
random
import
queue
from
time
import
sleep
import
sys
#
#需求分析:有大批量資料需要執行,而且是重複乙個函式操作(例如爆破密碼),如果全部開始執行緒數n多,這裡控制住執行緒數m個並行執行,其他等待
#
#繼承乙個thread類,在run方法中進行需要重複的單個函式操作
class
test(threading.thread):
def
__init__(
self
,queue,lock,num):
#傳遞乙個佇列queue和執行緒鎖,並行數
threading.thread.__init__(
self
)
self
.queue
=
queue
self
.lock
=
lock
self
.num
=
num
def
run(
self
):
#while true:#不使用threading.semaphore,直接開始所有執行緒,程式執行完畢執行緒都還不死,最後的print threading.enumerate()可以看出
with
self
.num:
#同時並行指定的執行緒數量,執行完畢乙個則死掉乙個執行緒
#以下為需要重複的單次函式操作
n
=
self
.queue.get()
#等待佇列進入
lock.acquire()
#鎖住執行緒,防止同時輸出造成混亂
print
'開始乙個執行緒:'
,
self
.name,
,n
print
'佇列剩餘:'
,queue.qsize()
print
threading.
enumerate
()
lock.release()
sleep(n)
#執行單次操作,這裡sleep模擬執行過程
self
.queue.task_done()
#發出此佇列完成訊號
threads
=
queue
=
queue.queue()
lock
=
threading.lock()
num
=
threading.semaphore(
3
)
#設定同時執行的執行緒數為3,其他等待執行
#啟動所有執行緒
for
i
in
range
(
10
):
#總共需要執行的次數
t
=
test(queue,lock,num)
t.start()
#吧佇列傳入執行緒,是run結束等待開始執行,放下面單獨乙個for也行,這裡少個迴圈吧
n
=
random.randint(
1
,
10
)
queue.put(n)
#模擬執行函式的逐個不同輸入
#吧佇列傳入執行緒,是run結束等待開始執行
#for t in threads:
# n=random.randint(1,10)
# queue.put(n)
#等待執行緒執行完畢
for
t
in
threads:
t.join()
queue.join()
print
'所有執行完畢'
print
threading.active_count()
print
threading.
enumerate
()
**:
Python多執行緒學習
一 建立執行緒 1 通過thread模組中的start new thread func,args 建立執行緒 在eclipse pydev中敲出以下 coding utf 8 import thread def run thread n for i in range n print i thread...
Python多執行緒學習
首先了解一下單執行緒,在啊很多年前的ms dos時代,作業系統處理問題都是單任務的,我想做聽 和看電影兩件事兒,那麼一定要先排一下順序。from time import ctime,sleep defmusic for i in range 2 print i was listening to mu...
python學習 多執行緒
示例 import threading import time def stuthread arg1,arg2 print threading.current thread getname 開始執行 print 引數為 s s arg1,arg2 time.sleep 1 暫停1s print th...