簡單談談python中的多程序

2022-10-04 21:33:23 字數 3107 閱讀 3490

程序是由系統自己管理的。

1:最基本的寫法

from multiprocessing import pool

def f(x):

return x*x

if __name__ == '__main__':

p = pool(5)

print(p.map(f, [1, 2, 3]))

[1, 4, 9]

2、實際上是通過os.fork的方法產生程序的

unix中,所有程序都是通過fork的方法產生的。

multiprocessing process

osinfo(title):

title

, __name__

(os, ): , os.ge

, os.getpid()

f(name):

info()

, name

__name__ == :

info()

p = process(=f, =(,))

p.start()

p.join()

3、執行緒共享記憶體

threading

run(info_list,n):

info_list.append(n)

info_list

__name__ == :

info=

i ():

p=threading.thread(=run,=[info,i])

p.start()

[0][0, 1]

[0, 1, 2]

[0, 1, 2, 3]

[0, 1, 2, 3, 4]

[0, 1, 2, 3, 4, 5]

[0, 1, 2, 3, 4, 5, 6]

[0, 1, 2, 3, 4, 5, 6, 7]

[0, 1, 2, 3, 4, 5, 6, 7, 8]

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

程序不共享記憶體:

multiprocessing process

run(info_list,n):

info_list.append(n)

info_list

__name__ == :

info=

i ():

p=process(=run,=[info,i])

p.start()

[1][2]

[3][0]

[4][5]

[6][7]

[8][9]

若想共享記憶體,需使用multiprocessing模組中的queue

multiprocessing process, queue

f(q,n):

q.put([n,])

__name__ == :

i ():

p=process(=f,=(q,i))

p.start()

: q.get()

4、鎖:僅是對於螢幕的共享,因為程序是獨立的,所以對於多程序沒有用

multiprocessing process, lock

f(l, i):

l.acquire()

, il.release()

__name__ == :

lock = lock()

num ():

proce程式設計客棧ss(=f, =(lock, num)).start()

hello world 0

hello world 1

hello w程式設計客棧orld 2

hello world 3

hello world 4

hello world 5

hello world 6

hello world 7

hello world 8

hello world 9

5、程序間記憶體共享:value,array

multiprocessing process, value, array

f(n, a):

n.value = i ((a)):

a[i] = -a[i]

__name__ == :

num = value(, )

arr = array(, ())

num.value

arr[:]

p = process(=f, =(num, arr))

p.start()

p.join()

0.0[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

3.1415927

[www.cppcns.com0, -1, -2, -3, -4, -5, -6, -7, -8, -9]

#manager共享方法,但速度慢

multiprocessing process, manager

f(d, l):

d = d = d = l.reverse()

__name__ == :

manager = manager()

d = manager.dict()

l = manager.list(())

p = process(=f, =(d, l))

p.start()

p.join()

d l

# print '-------------'這裡只是另一種寫法

# print pool.map(f,range(10))

[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

#非同步:這種寫法用的不多

multiprocessing pool

time

f(x):

x*xtime.sleep()

x*x__name__ == :

pool=pool(=)

res_list=

i ():

res=pool.apply_async(f,[i]) res_list.append(res)

r res_list:

r.get(timeout=10) #超時時間

同步的就是apply

本文標題: 簡單談談python中的多程序

本文位址:

Python中的多程序

編寫完的 沒有執行時稱為程式,正在執行的 稱為程序。程式是死的 靜態的 程序是活的 動態的 作業系統輪流讓各個任務交替執行,由於cpu的執行速度實在是太快了,我們感覺就像所有任務都在同時執行一樣。多程序中,每個程序中所有資料 包括全域性變數 都各自擁有乙份,互不影響。例如 我們啟動了qq,qq就是乙...

python中的多程序

import multiprocessing import time deffunc arg pname multiprocessing.current process name pid multiprocessing.current process pid print 當前程序id d,name ...

python多程序 python多程序

當有多個非相關任務需要處理時,並行能大大提高處理速度。這裡簡要介紹python的multiprocessing模組。簡單多程序編寫 當我們任務數量確定而且比較少的時候,可以手動為每個任務指定乙個程序來執行。import multiprocessing as mp def f a print a if...