使用multiprocessing
中的process
,其中start()
代表啟動程序,join()
代表等待程序結束再執行後面**程式。
from multiprocessing import process
from time import time,sleep
def func(arg):
time.sleep(6)
return arg
def main():
start = time()
p1 = process(target=func,args=('123',))
p1.start()
p2 = process(target=func,args=('456',))
p2.start()
p1.join()
p2.join()
end = time()
print('總共耗費了%.2f秒.' % (end - start))
if __name__ == '__main__':
main()
在建立程序時,子程序複製了父程序及其所有的資料結構,每個子程序有獨立的記憶體空間,所以子程序間不共享變數。
pool類可以提供指定數量的程序供使用者呼叫,當有新的請求提交到pool中時,如果池還沒有滿,就會建立乙個新的程序來執行請求。如果池滿,請求就會告知先等待,直到池中有程序結束,才會建立新的程序來執行這些請求。使用
multiprocessing
中的pool
,其中imap()
代表函式引數對映,join()
代表等待程序結束再執行後面**程式。
import time
from multiprocessing import pool
def run(fn):
time.sleep(1)
print(fn * fn)
if __name__ == "__main__":
testfl = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 程序池數目
num_pools = 3
pool = pool(num_pools)
# testfl:要處理的資料列表,run:處理testfl列表中資料的函式
pool.imap(run, testfl)
# pool.imap_unordered(run, testfl) 隨機順序
pool.close() # 關閉程序池,不再接受新的程序
pool.join() # 主程序阻塞等待子程序的退出
使用threading
中的thread
執行緒,其中start()
代表啟動程序,join()
代表等待執行緒結束再執行後面**程式。
使用threading
中的lock
鎖,其中acquire()
代表先獲取鎖才能執行後續,release()
代表等待執行緒結束再執行後面**程式。
# python中的多執行緒
from threading import thread,lock
import time
class wallet:
def __init__(self,money):
self.money = money
self._lock = lock()# 通過「鎖」來保護「臨界資源」
@property
def _money(self):
return self.money
def dp(self):
self._lock.acquire()
x = self.money - 1
time.sleep(0.01) # 延遲時間
self.money = x
self._lock.release()
class deposit(thread):
def __init__(self,wt):
super().__init__()
self.wt = wt
def run(self):# 執行緒執行函式run
self.wt.dp()
def main():
wt = wallet(100)
threads =
for i in range(100):
t = deposit(wt)
t.start()
for t in threads:
t.join()
print("balance: ",wt.money)
if __name__ == '__main__':
main()
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 ...