1.多執行緒
#多執行緒例項
from time import
sleep,ctime
import
threading
#多個函式
deftalk(content,loop):
for x in
range(loop):
print('
start talk:%s %s
' %(content,ctime()))
sleep(3)
defwrite(content,loop):
for x in
range(loop):
print('
start write:%s %s
' %(content,ctime()))
sleep(5)
#定義多個執行緒
threads=
t1=threading.thread(target=talk,args=('
執行緒1開始
',2))
t2=threading.thread(target=write,args=('
執行緒2開始
',2))
#執行執行緒
if__name__=='
__main__':
for x in
threads:
x.start()
for x in
threads:
x.join()
#執行緒守護,保證每個執行緒都執行完成
print('
over %s
' %ctime())
2.多執行緒鎖
python中有兩種鎖,乙個鎖是原始的鎖(原語), 不可重入,而另一種鎖則是可重入的鎖即遞迴鎖。而是thread模組中,只提供了不可重入的鎖,而在threading中則提供這兩種鎖。
可重入:當乙個執行緒擁有乙個鎖的使用權後,再次獲取鎖的使用權時,不會阻塞,會立馬得到使用權,則原始鎖的話,則不行,會阻塞。
方法一、thread不可重入鎖
importthread
import
time
lock =thread.allocate_lock()
defcount(id):
global
num;
while
true:
lock.acquire()
if num <= 10:
"thread id is : %s the num is %s\n
" %(id, str(num))
num = num + 1
else
:
break
lock.release()
else
: thread.exit_thread() if
__name__ == "
__main__":
num = 1thread.start_new_thread(count, ('a
',))
thread.start_new_thread(count, ('b
',))
time.sleep(5)
方法二、theading的lock(不可重入鎖)
importthreading
import
time
lock =threading.lock()
defcount(id):
global
num;
while
true:
lock.acquire()
if num <= 10:
"thread id is : %s the num is %s\n
" %(id, str(num))
num = num + 1
else
:
break
lock.release() if
__name__ == "
__main__":
num = 1t1 = threading.thread(target=count, args=('a'
, ))
t2 = threading.thread(target=count, args=('b'
, ))
t1.start()
t2.start()
time.sleep(5)
方法三:threading的rlock(可重入)
importthreading
import
time
lock =threading.rlock()
defcountnum(id):
global
num
lock.acquire()
if num <= 10:
"thread id is : %s the num is %s\n
" %(id, str(num))
num = num + 1countnum(id)
lock.release() if
__name__ == "
__main__":
num = 1t1 = threading.thread(target=countnum, args=('a'
)) t1.start()
time.sleep(5)
3、多程序例項
#多程序例項
from time import
sleep,ctime
from multiprocessing import
process
#多個函式
deftalk(content,loop):
for x in
range(loop):
print('
start talk:%s %s
' %(content,ctime()))
sleep(2)
defwrite(content,loop):
for x in
range(loop):
print('
start write:%s %s
' %(content,ctime()))
sleep(3)
#定義多個執行緒
processes=
p1=process(target=talk,args=('
程序1開始
',2))
p2=process(target=write,args=('
程序2開始
',2))
#執行執行緒
if__name__=='
__main__':
for x in
processes:
x.start()
for x in
processes:
x.join()
#執行緒守護,保證每個執行緒都執行完成
print('
over %s
' %ctime())
4.多程序鎖
from multiprocessing importprocess,lock
#執行緒的鎖是為了防止共享資料產生錯誤,從而加鎖保重每次運算元據只有乙個執行緒
#程序的鎖是為了在共享螢幕時不會出錯,比如列印時不會打亂了
deff(l,i):
l.acquire()
try:
print('
hello world
',i)
finally
: l.release()
if__name__ == '
__main__':
lock =lock()
for num in range(10):
process(target=f,args=(lock,num)).start()
python 多執行緒 和 多程序
單執行緒例子 usr bin python coding utf 8 name danxiancheng.py import time import threading def loop num,sec print loop s start num,time.strftime y m d h m s...
python多執行緒和多程序
pool 感謝多執行緒和多程序最大的不同在於,多程序中,同乙個變數,各自有乙份拷貝存在於每個程序中,互不影響 而多執行緒中,所有變數都由所有執行緒共享,所以,任何乙個變數都可以被任何乙個執行緒修改,因此,執行緒之間共享資料最大的危險在於多個執行緒同時改乙個變數,把內容給改亂了。python中,多執行...
多程序和多執行緒python
coding utf8 import threading import time class mop floor threading.thread def init self super mop floor,self init def run self print 我要拖地了 time.sleep ...