Python學習筆記(四)多程序的使用

2022-05-23 04:21:10 字數 2822 閱讀 6222

python中多程序與linux 下的c基本相同。

fork的基本使用

先看最簡單的例子:

#

coding: utf-8

import

osdef

my_fork():

pid =os.fork()

if pid ==0:

print

'this is child, pid = %d, parent id = %d

' %(os.getpid(), os.getppid())

elif pid >0:

print

'this is parent, pid = %d, child id = %d

' %(os.getpid(), pid)

os.waitpid(pid, 0)

#等待子程序結束

if__name__ == '

__main__':

my_fork()

這個例子演示了fork的基本使用,還有就是我們最後使用了waitpid來**子程序。

如果不知道具體的子程序號碼,可以使用wait函式。

管道pipe的使用

**如下:

#

coding: utf-8

import

osfrom time import

sleep

defmy_fork():

r, w =os.pipe()

pid =os.fork()

if pid ==0:

os.close(r)

#關閉讀端

w = os.fdopen(w, "w"

)

for i in range(10):

w.write(

'%s\n

' % (str(i+1))) #

最後加上\n

w.flush() #

這裡記得重新整理

sleep(0.5)

w.close()

elif pid >0:

os.close(w)

#關閉寫端

r = os.fdopen(r, "r"

)

while

true:

data = r.readline() #

不要使用read

ifnot

data:

print

'close.

'break

;

print

'received : %s

' %(data)

os.waitpid(pid, 0)

#等待子程序結束

if__name__ == '

__main__':

my_fork()

在子程序中,連續10次傳送數字。

這裡有幾點值得注意:

write時加上\n符號

接收時使用readline函式

每傳送完乙個資料,就重新整理flush一次緩衝區

使用訊號處理殭屍程序

python中也可以使用訊號處理函式,例如最簡單的中斷訊號:

#

coding: utf-8

import

osimport

signal

from time import

sleep

defhandler(a, b):

print

'ctrl + c'if

__name__ == '

__main__':

signal.signal(signal.sigint, handler)

while

true:

pass

每按一次ctrl+c,就觸發一次這個函式。

**如下:

#

coding: utf-8

import

osimport

signal

from time import

sleep

defhandler(a, b):

(pid, status) =os.wait()

print

'child %d finish, status = %d

' %(pid, status)

defmy_fork():

pid =os.fork()

if pid ==0:

print

'this is child, pid = %d, parent id = %d

' %(os.getpid(), os.getppid())

elif pid >0:

print

'this is parent, pid = %d, child id = %d

' %(os.getpid(), pid)

while

true:

pass

if__name__ == '

__main__':

signal.signal(signal.sigchld, handler)

my_fork()

每當有子程序消亡,就觸發sigchld訊號,然後在處理函式中呼叫wait函式。這裡比linux下簡單,不必使用while迴圈**。

下節使用python,編寫乙個多程序的併發伺服器。

完。

python學習筆記四(python多程序)

寫之前在猶豫,是否需要將多執行緒放在這個之前講或者將多執行緒和多程序合到一起講python的併發性,鑑於內容較多,還是分為兩個吧。這次將介紹multiprocessing模組的用法 怎麼寫多程序程式 程序間通訊 程序間資料共享等。由於python使用了內部的gil,在任意時刻只允許單個執行緒執行,無...

python學習筆記(六) 多程序

依據廖雪峰官方 的python教程整理 import os 多程序 unix linux作業系統提供了乙個fork 系統呼叫,os.fork 封裝了fork系統呼叫,windows系統無法使用 print process s start.os.getpid pid os.fork if pid 0 ...

Python 學習筆記 多程序爬蟲

前段時間學習了多執行緒,但在實際的情況中對於多執行緒的速度實在不滿意,所以今天就來學學多程序分布式爬蟲,在這裡感謝莫煩的python教程。在講述多程序之前,先來回顧一下之前學習的多執行緒。對於多執行緒可以簡單的理解成運輸快遞的貨車,雖然在整個運輸快遞的途中有很多貨車參與運輸,但快遞到你手中的時間並不...