:呼叫 _thread 模組中的start_new_thread()函式來產生新執行緒。語法如下
import threading
import time
def someting():
for i in range(1,11):
print(i)
time.sleep(1)
threading._start_new_thread(someting(),())
print("main")
類方式:
class mythread(threading.thread):
def __init__(self):
threading.thread.__init__(self)
print("mythread")
def run(self):
for i in range(1,11):
print(i)
time.sleep(1)
def start(self):
print("開始mythread")
super().start()
t=mythread()
t2 = mythread()
t.start()
t2.start()
如果重寫了start一定要呼叫父類的start.run會在strat之後自動呼叫,join執行緒阻塞方法,那個執行緒呼叫那個執行緒阻塞。
執行緒鎖:
當多個執行緒同時進行任務時,為了保證不會有多個執行緒同時對同乙個資料進行操作造成不可預料的後果,所以有了執行緒鎖。
生成乙個鎖:
lock = threading.lock()cond = threading.condition(lock=lock)
import threading
import time
import random
class thread1(threading.thread):
def run(self):
for i in range(1,11):
if i==3: #當thread1執行到3的時候進入
cond.acquire() #鎖
cond.wait() #等待thread2執行完成
cond.release()
print(i)
time.sleep(1)
class thread2(threading.thread):
def run(self):
for i in range(30,19,-1):
print(i)
time.sleep(1)
cond.acquire()
cond.notify() #喚醒
cond.release()
lock = threading.lock()
cond = threading.condition(lock=lock)
t1 = thread1()
t2 = thread2()
t1.start()
t2.start()
import threading
import time
import random
class
huofu
(threading.thread):
def__init__
(self,name=none):
threading.thread.__init__(self)
self.name = name
defrun(self):
while
true:
cond.acquire()
if len(guo)==0:
for i in range(1,11):
print('做出第個饅頭'.format(i))
time.sleep(1)
cond.notify_all()
cond.release()
cond2.acquire()
cond2.wait()
cond2.release()
class
chihuo
(threading.thread):
def__init__
(self,name=none):
threading.thread.__init__(self)
self.name = name
defrun(self):
while
true:
mantou=none
cond.acquire()
if len(guo)==0:
cond2.acquire()
cond2.notify()
cond2.release()
cond.wait()
else:
mantou=guo.pop()
cond.release()
if mantou is
notnone:
print('正在吃'.format(self.name,mantou))
time.sleep(random.randint(1,5))
guo =
lock = threading.lock()
cond = threading.condition(lock=lock)#吃的鎖
lock2 = threading.lock()
cond2 = threading.condition(lock=lock2)#蒸饅頭的鎖
huofu(name='做飯和尚').start()
chihuo(name='長眉和尚吃飯').start()
chihuo(name='短眉和尚吃飯').start()
chihuo(name='中眉和尚吃飯').start()
Python基礎 多執行緒
多執行緒在程式開發過程中特別重要,我們往往把一些耗時的操作在子執行緒中執行,這就是所謂的多執行緒了。在c 11中,寫了一些關於多執行緒的部落格。python也不例外,當然也要有多執行緒了。python提供了兩個模組來實現多執行緒thread 和threading thread 有一些缺點,在thre...
Python基礎 多執行緒
多工可以由多程序完成,也可以由乙個程序內的多執行緒完成。我們前面提到了程序是由若干執行緒組成的,乙個程序至少有乙個執行緒。由於執行緒是作業系統直接支援的執行單元,因此,高階語言通常都內建多執行緒的支援,python也不例外,並且,python的執行緒是真正的posix thread,而不是模擬出來的...
python 多執行緒基礎
join 等待某執行緒結束在繼續執行 queue 儲存程序結果 執行緒鎖在cpython中存在gil,大家可以嘗試其他直譯器版本,可能就不會存在gil了 import threadingprint threading.active count 列印已啟用執行緒數print threading.enu...