欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python多進程fork()函數(shù)詳解

 更新時間:2019年02月22日 08:33:32   作者:世界看我我看世界  
今天小編就為大家分享一篇關于Python多進程fork()函數(shù)詳解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧

進程

進程是程序的一次動態(tài)執(zhí)行過程,它對應了從代碼加載、執(zhí)行到執(zhí)行完畢的一個完整過程。進程是系統(tǒng)進行資源分配和調(diào)度的一個獨立單位。進程是由代碼(堆棧段)、數(shù)據(jù)(數(shù)據(jù)段)、內(nèi)核狀態(tài)和一組寄存器組成。

在多任務操作系統(tǒng)中,通過運行多個進程來并發(fā)地執(zhí)行多個任務。由于每個線程都是一個能獨立執(zhí)行自身指令的不同控制流,因此一個包含多個線程的進程也能夠實現(xiàn)進程內(nèi)多任務的并發(fā)執(zhí)行。

進程是一個內(nèi)核級的實體,進程結構的所有成分都在內(nèi)核空間中,一個用戶程序不能直接訪問這些數(shù)據(jù)。

進程的狀態(tài):

創(chuàng)建、準備、運行、阻塞、結束。

進程間的通信方式可以有:

  • 文件
  • 管道
  • socket
  • 信號
  • 信號量
  • 共享內(nèi)存

要讓Python程序實現(xiàn)多進程(multiprocessing),必須先了解操作系統(tǒng)的相關知識。

在Unix/Linux操作系統(tǒng)提供了一個fork()函數(shù),它非常特殊,調(diào)用一次,返回兩次,因為操作系統(tǒng)將當前的進程(父進程)復制了一份(子進程),然后分別在父進程和子進程內(nèi)返回。

Python中的進程

  • os.fork()
  • subprocess
  • processing
  • multiprocessing

fork()函數(shù)

函數(shù)原型:

Help on built-in function fork in module posix:
fork(...)
  fork() -> pid
  Fork a child process.
  Return 0 to child process and PID of child to parent process.

從fork()函數(shù)原型來看,它也屬于一個內(nèi)建函數(shù)。

子進程永遠返回0,而父進程返回子進程的ID。這樣做的理由是,一個父進程可以fork()出很多子進程,所以,父進程要記下每個子進程的ID,而子進程只需要調(diào)用getppid()就可以拿到父進程的ID。

Python的進程函數(shù)fork()是在os模塊,下面是一個關于進程的例子:

import os
print os.getpid() #獲取子進程的進程號
pid = os.fork()
if pid == 0 :
 print 'I am child process (%s) and my parent is %s.' % (os.getpid(), os.getppid())
else :
 print 'I (%s) just created a child process (%s).' % (os.getpid(), pid)

執(zhí)行結果:

1526
I (1526) just created a child process (1527).
I am child process (1527) and my parent is 1526.

有了fork調(diào)用,一個進程在接到新的任務時,就可以復制出一個子進程來處理新任務。常見的Apache服務器就是由父進程監(jiān)聽端口,一旦有新的http請求時,就fork出子進程來處理新的http請求。

再看一個例子:

#coding=utf-8
import os
os.fork()
print 1

執(zhí)行結果:

1
1

程序中,父進程中創(chuàng)建了一個子進程,子進程運行打印了一個1,回到父進程又打印了一個1,所以結果是打印了2個1。

需要注意的是,上面創(chuàng)建進程的函數(shù)都是Unix/Linux下的,Windows下是沒有的,那在Windows下又使用什么實現(xiàn)多進程呢?

由于Python是跨平臺的,自然也應該提供一個跨平臺的多進程支持。multiprocessing模塊就是跨平臺版本的多進程模塊, 支持子進程、通信和共享數(shù)據(jù)、執(zhí)行不同形式的同步。

multiprocessing模塊提供了一個Process類來創(chuàng)建一個新的進程對象。

總結

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關內(nèi)容請查看下面相關鏈接

相關文章

  • python修改字典內(nèi)key對應值的方法

    python修改字典內(nèi)key對應值的方法

    這篇文章主要介紹了python修改字典內(nèi)key對應值的方法,涉及Python中字典賦值的相關實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • python實現(xiàn)圖書館研習室自動預約功能

    python實現(xiàn)圖書館研習室自動預約功能

    這篇文章主要為大家詳細介紹了python實現(xiàn)圖書館研習室自動預約功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • Python中random模塊生成隨機數(shù)詳解

    Python中random模塊生成隨機數(shù)詳解

    本文給大家匯總了一下在Python中random模塊中最常用的生成隨機數(shù)的方法,有需要的小伙伴可以參考下
    2016-03-03
  • 超實用的 10 段 Python 案例

    超實用的 10 段 Python 案例

    Python是目前最流行的語言之一,它在數(shù)據(jù)科學、機器學習、web開發(fā)、腳本編寫、自動化方面被許多人廣泛使用。它的簡單和易用性造就了它如此流行的原因。今天這篇文章就給大家分享 10 段超級有用的 Python 案例,需要的朋友可以參考一下
    2021-09-09
  • Python基礎入門之魔法方法與異常處理

    Python基礎入門之魔法方法與異常處理

    在python中,所有以“__"雙下劃線包起來的方法,都統(tǒng)稱為魔法方法,下面這篇文章主要給大家介紹了關于Python基礎入門之魔法方法與異常處理的相關資料,需要的朋友可以參考下
    2021-11-11
  • 如何使用pyinstaller打包時引入自己編寫的庫

    如何使用pyinstaller打包時引入自己編寫的庫

    這篇文章主要介紹了如何使用pyinstaller打包時引入自己編寫的庫,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Python使用python-docx讀寫word文檔

    Python使用python-docx讀寫word文檔

    這篇文章主要為大家詳細介紹了Python使用python-docx讀寫word文檔,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • python中添加模塊導入路徑的方法

    python中添加模塊導入路徑的方法

    這篇文章主要介紹了python中添加模塊導入路徑的方法 ,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • 詳解Python列表解析式的使用方法

    詳解Python列表解析式的使用方法

    Python?是一種極其多樣化和強大的編程語言!當需要解決一個問題時,它有著不同的方法。本文將將會展示列表解析式的使用方法,需要的可以參考一下
    2022-04-04
  • pyinstaller通過spec文件打包py程序的步驟

    pyinstaller通過spec文件打包py程序的步驟

    這篇文章主要介紹了pyinstaller通過spec文件打包py程序,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-05-05

最新評論