python中的多執行緒和多程序
如果使用multiprocessing模組是相當簡單的,通過程序池或執行緒池來限定併發的數量。
建立多程序和多執行緒的語法是一樣的,只需要將pool替換為threadpool即可將多程序替換為多執行緒。
from multiprocessing import pool # 程序池
from multiprocessing.dummy import pool as threadpool # 執行緒池
defdo_something
(args):
# 注意,如果有多個引數,需要包裝成乙個tuple傳入
param1,param2 = args
#獲取當前執行緒的名字
name = multiprocessing.current_process().name
print('process=%s, p1=%d, p2=%d' %(name, param1,param2))
return n*2
defmain
():# 注意,如果需要傳入過個引數,需要整理成tuple格式
# task是乙個可迭代物件,傳入需要計算的引數
task=[(1,11),(2,22),(3,33),(4,44),(5,55),(6,66),(7,77)]
# 多程序示例
pool = pool(4) # 開4個核
result = pool.map(do_something, task) # 將每個程序的結果組成list
pool.close() # 關閉程序池(pool),使其不在接受新的任務
pool.join() # 等待子程序結束
# 多執行緒示例
pool = threadpool(20) # 20個執行緒
result = pool.map(do_something, task)
pool.close()
pool.join()
if __name__ == '__main__':
main()
有些資料說,要將多程序多執行緒pool.map
寫在if __name__ == '__main__'
後面才能執行,後來發現不用。
但是,在relp模式下肯定是不會成功的。
參考
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 ...