1. 程式人生 > >python中程序、程序池

python中程序、程序池

程序(Process)是計算機中的程式關於某資料集合上的一次執行活動,是系統進行資源分配和排程的基本單位,是作業系統結構的基礎。在早期面向程序設計的計算機結構中,程序是程式的基本執行實體;在當代面向執行緒設計的計算機結構中,程序是執行緒的容器。程式是指令、資料及其組織形式的描述,程序是程式的實體。
在python中要想使用程序,需要匯入multiprocessing模組。
1.程序的基本實現:

import multiprocessing
import time


def run(num):

    i = 0
    while i < num :

        print("小明跑步,跑了%d圈" % i)
        time.sleep(1)
        i += 1

def listen(num):

    i = 0
    while i < num:

        print("小明聽歌,聽第%d首歌" % i)
        time.sleep(1)
        i += 1

def main():

    #程序1、程序2建立的準備工作,arge後面傳的是元組
    p1 = multiprocessing.Process(target=run, args=(10,))
    p2 = multiprocessing.Process(target=listen, args=(10,) )

    #開始程序1和程序2,程序的生命週期是從開始的時候被建立到函式結束死亡
    p1.start()
    p2.start()


if __name__ == '__main__':
    main()

執行結果:
小明跑步,跑了0圈
小明聽歌,聽第0首歌
小明跑步,跑了1圈
小明聽歌,聽第1首歌
小明跑步,跑了2圈
小明聽歌,聽第2首歌
小明跑步,跑了3圈
小明聽歌,聽第3首歌
小明跑步,跑了4圈
小明聽歌,聽第4首歌
小明跑步,跑了5圈
小明聽歌,聽第5首歌
小明跑步,跑了6圈
小明聽歌,聽第6首歌
小明跑步,跑了7圈
小明聽歌,聽第7首歌
小明聽歌,聽第8首歌
小明跑步,跑了8圈
小明聽歌,聽第9首歌
小明跑步,跑了9圈

2.程序池 Pool:
Pool可以提供指定數量的程序供使用者呼叫,當有新的請求提交到pool中時,如果池還沒有滿,那麼就會建立一個新的程序用來執行該請求;但如果池中的程序數已經達到規定最大值,那麼該請求就會等待,直到池中有程序結束,才會建立新的程序來它。
我的理解是,銀行有5個視窗,有好多人要來辦事情,第一次可以去五個人,後面的人就是哪裡有空了去哪裡,以次類推。

實現:

import random
import os
from multiprocessing import Pool

import time

def demo(name):

    print("%s開始進行,程序號是%s"%(name, os.getpid()))
    #記錄程序開始的時間
    t_start = time.time()

    #讓程序隨機睡以小段時間
    time.sleep(random.random()*2)

    #進錄程序結束的時間
    t_end = time.time()

    print("我是程序%s,我來了,我進行的時間是%.2f,我走了" % (name, (t_end-t_start)))


def main():

    #建立一個程序池,最大程序數是3
    my_pool =  Pool(3)

    for i in range(10):
        my_pool.apply_async(demo,(i,))

    my_pool.close()

    #這裡主程序必須等待子程序全部結束
    my_pool.join()

if __name__ == '__main__':
    main()


執行結果:
0開始進行,程序號是7375
1開始進行,程序號是7376
2開始進行,程序號是7377
我是程序0,我來了,我進行的時間是0.19,我走了
3開始進行,程序號是7375
我是程序1,我來了,我進行的時間是1.17,我走了
4開始進行,程序號是7376
我是程序3,我來了,我進行的時間是1.13,我走了
5開始進行,程序號是7375
我是程序2,我來了,我進行的時間是1.45,我走了
6開始進行,程序號是7377
我是程序6,我來了,我進行的時間是0.54,我走了
7開始進行,程序號是7377
我是程序4,我來了,我進行的時間是1.07,我走了
8開始進行,程序號是7376
我是程序8,我來了,我進行的時間是0.56,我走了
9開始進行,程序號是7376
我是程序9,我來了,我進行的時間是0.09,我走了
我是程序5,我來了,我進行的時間是1.68,我走了
我是程序7,我來了,我進行的時間是1.96,我走了

由結果可以看出程序池是提供指定數量的程序供使用者呼叫,當有新的請求提交到pool中時,如果池還沒有滿,那麼就會建立一個新的程序用來執行該請求;但如果池中的程序數已經達到規定最大值,那麼該請求就會等待,直到池中有程序結束,才會建立新的程序來它。

相關推薦

pythonsocket程序執行緒協程的建立方式和應用場景

程序 場景 利用多核、高計算型的程式、啟動數量有限 程序是計算機中最小的資源分配單位 程序和執行緒是包含關係 每個程序中都至少有一條執行緒 可以利用多核,資料隔離

python程序程序

程序(Process)是計算機中的程式關於某資料集合上的一次執行活動,是系統進行資源分配和排程的基本單位,是作業系統結構的基礎。在早期面向程序設計的計算機結構中,程序是程式的基本執行實體;在當代面向執行緒設計的計算機結構中,程序是執行緒的容器。程式是指令、資料及

python GIL鎖程序與執行緒同步非同步

一、GIL全域性直譯器鎖 全域性直譯器鎖 在CPython中,全域性直譯器鎖(GIL)是一個互斥鎖,它可以防止多個本機執行緒同時執行Python程式碼。之所以需要這個鎖,主要是因為CPython的記憶體管理不是執行緒安全的。(然而,自從GIL存在以來,其他特性已經逐漸依賴於它所執行的保證)

Python程序程序以及程序間通訊

概念 程序 程序是系統進行資源分配和排程的基本單位,是作業系統結構的基礎。簡單可以理解為正在執行的程式的例項,都會有一個pid作為標識。 多工 以作業系統為例,在上面可以同時執行QQ word 微信等多個程式,這就是多工 之前的單核CPU也

pythonsocket進程線程協程的創建方式

num join() 進行 set rom style 高效率 accept cep 一、TCP-socket 服務端: import socket tcp_sk = socket.socket() tcp_sk.setsockopt(socket.SOL_SO

Python的多程序小示例

#!/usr/bin/python # -*- coding:utf-8 -*- import requests import json import time from multiprocessing import Pool def func(name): print('

一句話介紹python執行緒程序和協程

一、程序: Python的os模組封裝了常見的系統呼叫,其中就包括fork。而fork是linux常用的產生子程序的方法,簡言之是一個呼叫,兩個返回。 在python中,以下的兩個模組用於程序的使用。詳細就不展開。 multiprocessing:跨平臺版本的多程序模組。 Pool:程序池 Queu

Python之——Python的多程序和多執行緒

轉載請註明出處:https://blog.csdn.net/l1028386804/article/details/83042246 一、多程序 Python實現對程序的方式主要有兩種,一種方法是使用os模組中的fork方法,另一種方法是使用multiprocessing模組。區別在於:

python的多程序,多執行緒,死鎖,多協程

本人根據自己的理解來總結的,如果有錯誤的地方還請各位大佬指正,謝謝了. 程序:程式是計算機可執行的二進位制資料,只有被作業系統呼叫的時候才開始它們的生命週期.程序就是程式的一次執行,擁有自己的地址空間,記憶體,程序id(pid),資料棧及其他記錄其執行軌跡的輔助資料;最小的

python的多程序和多執行緒

作者:liuyazhuang  來源:CSDN  原文:https://blog.csdn.net/l1028386804/article/details/83042246?utm_source=copy  轉載出處:https://blog.csdn.net/l102838

作業系統任務程序和執行緒總結

多工處理是指使用者可以在同一時間內執行多個應用程式,每個正在執行的應用程式被稱為一個任務。linux 就是一個支援多工的作業系統(Windows也是多工作業系統),比起單任務系統它的功能增強了許多。          多工作業系統使用某種排程策略支援多個任務併發執行。事

Python使用多程序複製檔案

使用fork()函式建立父子程序,父程序複製檔案的前半部分,子程序複製檔案的後半部分 #!/usr/bin/python #coding=utf-8 import sys,os #將第一引數作為原始

程序程序

多程序Manager 資料共享的方式只有兩種結構Value和Array。Python中提供了強大的Manage專門用來做資料共享的,其支援的型別非常多,包括,Value, Array,list,dic

Python連載37-多程序程序子類程序父子id

一、執行緒替代方案 1.subprocess (1)完全跳過執行緒,使用程序 (2)是派生程序的主要替代方案 (3)python2.4後引入 2.multiprocessing (1)使用threading介面派生,使用子程序 (2)允許為多核或者多CPU派生程序,介面很threading非常相似 (3)py

pythonenumeratexrangerange

strong 通過 cbo shu enume .... phone 自動增長 brush enumerate可以給列表自動生成一列,默認從0開始,自動增長1,可以指定默認開始值 list_product = ["thinkpad","macbook","iphone8"

python@staticmethod@classmethod和實例方法

dir pri cep ear 代碼 應用 can 打印 靜態 1.形式上的異同點: 在形式上,Python中:實例方法必須有self,類方法用@classmethod裝飾必須有cls,靜態方法用@staticmethod裝飾不必加cls或self,如下代碼所示: 1

pythontypeclassobject的區別

版本 src 同時 ati 創建 內置 lis dict 之間 type 一、 type可以用來返回一個對象的類型 例如: 二、 由於Python中一切皆對象,也就是說Python中的任何變量類型都是可以被修改的,這也是Python等動態編程語言的特點。type的基類是o

pythonreadabilityDocument和html2text的使用

今天在處理html資料的時候發現了python裡面比較好玩的幾個庫,先存起來之後有時間慢慢再去學習和使用,覺得是一件蠻有意思的事情。今天想學習使用的是html2text模組和readability模組。其中,第一個模組是負責對html資料進行處理的,返回html中的文字資訊;第二個模組是負責html

python apply】python applymapapplymap的用法

apply 用在dataframe上,用於對row或者column進行計算 applymap: 作用在dataframe的每一個元素上 map (其實是python自帶的)用於series上,是元素級別的操作,map 跟apply 功能類似,用法差不多 #

python方法函式例項方法類方法靜態方法的理解

python中的方法、函式、例項方法、類方法、靜態方法的理解 方法與函式 例項方法、類方法、靜態方法 例項方法 類方法 靜態方法 為了便於理解,我舉個栗子: 方法與函式 def func():