Python 多程序和多執行緒

2022-04-06 01:25:49 字數 2517 閱讀 9491

使用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 ...