這是另外一種形式表達方式,基本上學習完一種就可以了。
from threading import thread
import queue#容器,也可以用陣列,列表,字典形式
import time
class producer(thread):#生產者其實這個threading.thread一樣的,只是他用了import模式
def __init__(self,name,queue):#寫簡單的,正常是用super繼承
self.__name=name#私有變數,生產者
self.__queue=queue#私有變數,容器
super(producer, self).__init__()
def run(self):
while true:
if self.__queue.full():#如果佇列滿了,則等待下一秒
time.sleep(1)
else:#如果沒滿,則生產乙個
self.__queue.put('baozi')
print('productor one more baozi')
#thread.run(self)#簡化可以不要,加上表示再執行原生的執行緒run
class consumer(thread):#消費者
def __init__(self,name,queue):#寫簡單的,正常是用super繼承
self.__name=name#私有變數,生產者
self.__queue=queue#私有變數,容器
super(consumer, self).__init__()
def run(self):
while true:
if self.__queue.empty():#如果為空,則等待一秒
time.sleep(1)
else:#如果不為空,則取出乙個
self.__queue.get()
print('consumer eat baozi')
#thread.run(self)
q=queue.queue(maxsize=100)
baogou1=producer('laogou1',q)
baogou1.start()
baogou2=producer('laogou2',q)
baogou2.start()
baogou3=producer('laogou3',q)
baogou3.start()
for item in range(20):
name='chentao%d'%(item)
print(name)
temp=consumer(name,q)
temp.start()
#簡單生產與消費者
import threading
import time
import queue
def producer(name,que):
que.put('baozi')#生產
print('%s made a baoz'% name)
def consumer(name,que):
que.get()#消費
print('%s got a baozi....'% name)
q=queue.queue()
p1=threading.thread(target=producer,args=('one',q))
p2=threading.thread(target=producer,args=('two',q))
p1.start()
p2.start()
c1=threading.thread(target=consumer,args=('c1',q))
c2=threading.thread(target=consumer,args=('c2',q))
c1.start()
c2.start()
#要是加了join,執行緒好像結束了
#簡單生產與消費者
import threading
import time
import queue
import random
def producer(name,que):
while true:
que.put('baozi')
print('%s made a baoz'% name)
time.sleep(random.randrange(5))
def consumer(name,que):
while true:
try:
que.get_nowait()
print('%s got a baozi....'% name)
except exception as e:
print('沒有包子了')
time.sleep(random.randrange(3))
q=queue.queue()
p1=threading.thread(target=producer,args=('one',q))
p2=threading.thread(target=producer,args=('two',q))
p1.start()
p2.start()
c1=threading.thread(target=consumer,args=('c1',q))
c2=threading.thread(target=consumer,args=('ccccccccc2',q))
c1.start()
c2.start()
#簡單生產與消費者,加強程式複雜度
import threading
import time
import queue
import random
def producer(name,que):
while true:
if que.qsize()<3:
que.put('baozi')
print('%s made a baoz'% name)
else:
print('還有三個包子 - -')
time.sleep(random.randrange(5))
def consumer(name,que):
while true:
try:
que.get_nowait()
print('%s got a baozi....'% name)
except exception as e:
print('沒有包子了')
time.sleep(random.randrange(3))
q=queue.queue()
p1=threading.thread(target=producer,args=('one',q))
p2=threading.thread(target=producer,args=('two',q))
p1.start()
p2.start()
c1=threading.thread(target=consumer,args=('c1',q))
c2=threading.thread(target=consumer,args=('ccccccccc2',q))
c1.start()
c2.start()
#多把鎖
import threading
import time
num=0
num2=0
def run(n):
global num
global num2
time.sleep(0.1)
lock.acquire()#鎖只放在操作的時候,要是放在前面,就成了序列操作,即單執行緒
num+=1
lock.acquire()
num2+=1
lock.release()
lock.release()
time.sleep(0.01)
print(num)
lock=threading.rlock()#記住陣列,記住多把鎖,例如有2個acquire,必須有對應的2個releas,#工作少用, 單鎖用得多
for i in range(100):
t=threading.thread(target=run,args=(10,))
t.start()
Python自學基礎訓練之logging
之前是一直用print輸出,有點不方便,如果用logging的話,可以另外輸出,容易查詢問題點,如果之前不寫,後面再看起自己的 也需要花費好長時間。import logging logging.basicconfig level logging.debug,format asctime s file...
Python基礎訓練(一)
1.閏年判斷 給定乙個年份,判斷這一年是不是閏年。當以下情況之一滿足時,這一年是閏年 1 年份是4的倍數而不是100的倍數 2 年份是400的倍數。其他的年份都不是閏年。n int input if n 4 0 and n 100 0 print yes elif n 400 0 print yes...
Python基礎訓練(二)
1.楊輝三角 楊輝三角形又稱pascal三角形,它的第i 1行是 a b i的展開式的係數。它的乙個重要性質是 三角形中的每個數字等於它兩肩上的數字相加。下面給出了楊輝三角形的前4行 1 11 2 1 1 3 3 1 給出n,輸出它的前n行。輸入格式 輸入包含乙個數n。輸出格式 輸出楊輝三角形的前n...