python程序池pool
當需要建立的子程序數量不多時,可以直接利用multiprocessing中的process動態生成多個程序,但如果是上百甚至上千個目標,手動的去建立程序的工作量巨大,此時就可以用到multiprocessing模組提供的pool方法。
初始化pool是,可以指定乙個最大程序數,當有新的請求提交到pool中是,如果吃還沒有滿,那麼就會建立乙個新的程序來執行該請求。但如果池中的程序數已經達到指定的最大值,那麼該請求就會等待,直到池中有程序結束,才會用之前的程序來執行新的任務。
import multiprocessing
import time
import os
import random
def test1(msg):
t_start = time.time()
print("%s開始執行,程序號為%d" % (msg, os.getpid()))
time.sleep(random.random() * 2)
t_stop = time.time()
print("%s執行完成,耗時%.2f" % (msg, t_stop - t_start))
if __name__ == "__main__":
po = multiprocessing.pool(3)
for i in range(0, 10):
# 每次迴圈將會用空閒出來的子程序去呼叫目標
print("-----start-----")
po.close() # 關閉程序池,關閉後po不再接收新的請求
po.join() # 等待po中所有子程序執行完成,必須放在close語句之後
print("-----end-----")
multiprocessing.pool常用函式解析:
close():關閉pool,使其不再接受新的任務;
terminate():不管任務是否完成,立即終止;
join():主程序阻塞,等待子程序的退出, 必須在close或terminate之後使用;
python程序池中的queue
如果要使用pool建立程序,就需要使用multiprocessing.manager()中的queue(),而不是multiprocessing.queue(),否則會得到一條如下的錯誤資訊:
runtimeerror:queue objects should only be shared between processes through inheritance.
下面的例項演示了程序池中的程序如何通訊:
import os
import multiprocessing
import time
def write(q):
print("write啟動(%s),父程序為(%s)" % (os.getpid(), os.getppid()))
for i in "python":
q.put(i)
def read(q):
print("read啟動(%s),父程序為(%s)" % (os.getpid(), os.getppid()))
for i in range(q.qsize()):
print("read從queue獲取到訊息:%s" % q.get(true))
if __name__ == "__main__":
print("(%s) start" % os.getpid())
q = multiprocessing.manager().queue()
po = multiprocessing.pool()
time.sleep(2)
po.close()
po.join()
print("(%s) end" % os.getpid())
python子程序 Python實戰之子程序
最近做乙個小工具需要用到python的字程序,看了一下python的api,subprocess模組可以就可以實現,並且還挺簡單 要實現乙個簡單的自程序,只需要 import sys,os,subprocess p subprocess.popen ls l shell false,stdin no...
python程序和執行緒 Python中的程序和執行緒
程序和執行緒 我們開啟我們的計算機就會看到程序和執行緒 那什麼是程序什麼是執行緒 我的理解是程序是指在系統中正在執行的乙個應用程式 程式一旦執行就是程序,或者更專業化來說 程序是指程式執行時的乙個例項。執行緒是程序的乙個實體。程序 資源分配的最小單位,執行緒 程式執行的最小單位。我舉個例子,比如開啟...
Python併發程式設計之程序(殭屍程序 孤兒程序)
前言 本博文是對python併發程式設計之程序的知識延伸,主要講解 殭屍程序 孤兒程序。python多程序中的multiprocessing python多程序中的fork python併發程式設計之程序 守護程序 鎖 訊號量 四 知識擴充套件 在前面的博文裡,我們介紹到 正常情況下,子程序是通過父...