1. 程式人生 > >multiprocessing多程序的執行過程分析

multiprocessing多程序的執行過程分析

import os
from multiprocessing import Process
#multiprocessing 跨平臺,可以支援Linux和Windows
print("***程序%d"%os.getpid())

def test():
    print("this is new process")
    
print("---程序%d"%os.getpid())

p = Process(target=test)

print("++++程序%d"%os.getpid())
if __name__=="__main__":#以下程式碼只在主程序中執行
    print("start程序%d"%os.getpid())
    p.start() #一個新的程序開始執行test函式裡程式碼

輸出結果為:

***程序8132
---程序8132
++++程序8132
start程序8132
***程序5920
---程序5920
++++程序5920

this is new process

分析:

if __name__=="__main__"以上程式碼父程序和子程序都會執行並且父程序是在建立子程序之前就已經順序執行,
在p.start()開始執行後,會返回執行上面程式碼,為什麼不是僅僅執行Process中僅僅指定的test呢?
而其下面的程式碼只會在父程序中執行


相關推薦

java的程序執行模式分析

    一般我們在java中執行其它類中的方法時,無論是靜態呼叫,還是動態呼叫,都是在當前的程序中執行的,也就是說,只有一個java虛擬機器例項在執行。而有的時候,我們需要通過java程式碼啟動多個java子程序。這樣做雖然佔用了一些系統資源,但會使程式更加穩定,因為新啟動

multiprocessing程序執行過程分析

import os from multiprocessing import Process #multiprocessing 跨平臺,可以支援Linux和Windows print("***程序%d"%

032_面向對象_05_程序執行過程的內存分析_02

void nbsp 包括 bsp 程序 執行過程 計算機類 行為 cpu 一、實例代碼   package edu.aeon.test; /** * [說明]計算機類 * @author aeon */ public class Computer { /**

Java程式程序執行模式的例項分析

一般我們在java中執行其它類中的方法時,無論是靜態呼叫,還是動態呼叫,都是在當前的程序中執行的,也就是說,只有一個java虛擬機器例項在執行。而有的時候,我們需要通過java程式碼啟動多個java子程序。這樣做雖然佔用了一些系統資源,但會使程式更加穩定,因為新啟動的程式是在不同的虛擬機器程序中執行

Linux程序啟動過程分析do_execve(可執行程式的載入和執行)---Linux程序的管理與排程(十一)

execve系統呼叫 execve系統呼叫 我們前面提到了, fork, vfork等複製出來的程序是父程序的一個副本, 那麼如何我們想載入新的程式, 可以通過execve來載入和啟動新的程式。 x86架構下, 其實還實現了一個

【計算機原理】程序執行過程

進程 cnblogs div 空間 時間片 chat 內存管理 tro alt 本章主要介紹程序執行過程中操作系統、CPU都幹了什麽 運行前 程序在運行前,只是在硬盤上待著,此時就是一堆二進制代碼而已,沒有任何作用。 程序只有進入了內存才能運行,但是要進入內存,則需要服從操

u-boot、kernel和filesystem 執行過程分析

標題:   Uboot -kerne-root 啟動流程 內容:   ※uboot啟動流程   ※Kernel啟動流程   ※Root啟動流程   ※構建根檔案系統   /********************************* *u-boot

python程序———9、multiprocessing程序程式設計

python多程序的multiprocessing的用法跟多執行緒threading的用法基本差不多,直接上程式碼吧   import multiprocessing import os import time #fork()只能在linux中使用 # pid = os.fork

程序建立過程分析NtCreateProcess-NtCreateProcessEx-PspCreateProcess

轉載自:http://www.blogfshare.com/createprocess-analyse.html 在核心中,windows建立一個程序的過程是從NtCreateProcess函式開始的。找到這個函式,發現它只是簡單地對引數稍作處理,然後把建立程序的任務交給NtCreateProc

程式/程序執行時間分析(user cpu time, system cpu time, elpapsed time)

1. 背景 近日做程式優化任務,程式碼不長,時間測試起來需要在for迴圈里加,破壞了程式執行的流水線,導致時間不準。網上查看了些相關資料,學到了一些東西,雖然對本任務沒用,但對於程式/程序執行時間可加深理解。 首先,需要明白的是: 我們平時常用的測量

spring MVC執行過程分析與原始碼實現

spring mvc 啟動過程可分為如下3步: =============================================                             web.xml                           Dispa

程序執行空間分析

7.1 程序執行空間 程式編譯連結成功後,要執行;由自己的虛地址空間,對映到實體地址空間進行執行; 可執行檔案的虛地址空間,也就是程序執行空間,是怎麼劃分的? linux-64bit機器為例: 地址64bit,標識範圍:0x0000000000000000 ~

Python multiprocessing 程序程序間傳遞Lock 遇到的問題

無法傳遞 Lock物件 from multiprocessing import Pool,Lock def text(i,lock): print(i) lock.acquire() DOSOMETHING lock.release() if __na

keras tensorflow 在python下程序執行

from multiprocessing import Process import os def training_function(...): import keras # 此處需要在子程序中 ... if __name__ == '__mai

rbd map 執行過程分析

分析的 ceph 程式碼版本:  12.2.4 分析的 kernel 程式碼版本:  4.16.0 在執行 `rbd map <pool_name>/<image_name>` ,整個執行流程是如何完成的呢? 這個 map 主要可以分為兩個部

從JS執行過程分析閉包的概念

(自己理解,有誤請指正 ) 首先,閉包這個詞真讓人難理解,中華文化博大精深,講究見名知意,但是閉包確實是理解一門語言特性中不可或缺的一個東西,網路上資料千奇百怪,講了一通也很難讓人有醍醐灌頂的感覺,這裡我來說一說我對閉包的理解: # 閉包是和特定語言無關的東西 # 閉包是指的是通過特

RMI執行過程分析

客戶端程式碼 public class RMIClient { public static void main(String... args) throws RemoteException, NotBoundException, Malformed

Mapreduce執行過程分析(基於Hadoop2.4)——(一)

轉載自:http://www.cnblogs.com/Scott007/p/3836687.html 1 概述 該瞅瞅MapReduce的內部執行原理了,以前只知道個皮毛,再不搞搞,不然怎麼死的都不曉得。下文會以2.4版本中的WordCount這個經典例子作為分析的

[] taskService.completeTask(task.getId());的執行過程分析

taskservice.completetask(task.getid());單步跟蹤下去的順序1、執行函式體內,得到dbid,感覺是注入到這個id去的。在taskimpl中有setdbid的方法2、commandservice.execute(new completetas

【QT】Qt 5.9 QWidget程式執行過程分析

一個最簡單的QWidget程式可能是下面這個樣子: int main(int argc, char *argv[]) { QApplication a(argc, argv); QWidget w; w.show();