多程序學習筆記

2022-08-22 02:51:13 字數 3873 閱讀 9180

#coding=utf-8

'''執行緒與程序的區別

執行緒同時修改乙份資料時必須加鎖,mutex互斥鎖

什麼時候使用多執行緒?

io操作不占用cpu

計算占用cpu,

pyhton多執行緒不適合cpu密集操作性的任務,適合io操作密集的任務

'''import multiprocessing

import time

import threading

# def threadrun():

# print threading._get_ident()

## def run(name):

# time.sleep(2)

# print 'hello',name

# t = threading.thread(target=threadrun) #程序裡面再啟動執行緒

# t.start()

## if __name__ == '__main__':

# for i in range(10):

# p = multiprocessing.process(target=run,args=('zq%s'%i,)) #啟動程序

# p.start()

# #p.join()

## #獲取程序號

# from multiprocessing import process

# import os##

# def info(title):

# print(title)

# print('module name:', __name__)

# print('parent process:', os.getppid())

# print('process id:', os.getpid())

# print("\n\n")##

# def f(name):

# info('\033[31;1mcalled from child process function f\033[0m')

# print('hello', name)

## if __name__ == '__main__':

# info('\033[32;1mmain process line\033[0m')

# p = process(target=f, args=('bob',))

# p.start()

# # p.join()

#程序之間的通訊 執行緒之間的佇列可以共享使用,但是程序之間不行,執行緒的佇列不可以傳給另乙個程序使用

#如果想使用,必須使用程序佇列:queue

'''主程序將程序佇列當做引數傳給子程序,實際上是轉殖乙個程序佇列給子程序,並不是共享,

但是當主程序往主程序序列put東西的時候,主程序佇列會通過pickle資料例項化把主程序

佇列的資料分享轉殖給子程序的序列,

'''# from multiprocessing import process

# from multiprocessing import queue

# def f(qq):

# qq.put([42,none,'zq'])

## if __name__ == '__main__':

# q = queue()

# p = process(target=f,args=(q,))

# p.start()

# print q.get()

# p.join()

#兩個程序之間通訊的另一種方法:管道

# from multiprocessing import process,pipe

# def f(conn):

# conn.send(['12341','qweqwe'])

# conn.close()

## if __name__ == '__main__':

# parent_conn,child_conn = pipe()

# p = process(target=f,args=(child_conn,))

# p.start()

# print parent_conn.recv()

# p.join()

#兩個程序之間分享資料之:manager manager自帶程序鎖,不需要設定

# from multiprocessing import process,manager

# import os

## def f(dict1,list1):

# dict1[os.getpid()] = os.getpid()

# print list1

## if __name__ == '__main__':

# with manager() as manager:

# d = manager.dict() #生成乙個字典可以在多個程序之間傳遞和共享

# l= manager.list(range(5)) #生成乙個列表可以在多個程序之間傳遞和共享

# p_objlist =

# for i in range(10):

# p = process(target=f,args=(d,l))

# p.start()

# for res in p_objlist:

# res.join()

## print d

# print l

#程序鎖 用於螢幕共享,比如列印程序1的資料時候會插入程序2的資料

# from multiprocessing import process,lock

# def f(l,i):

# l.acquire()

# print ' i am %s'%i

# l.release()

## if __name__ == '__main__':

# lock= lock()

# for num in range(100):

# process(target=f,args=(lock,num)).start()

#程序池 防止程序過多占用過多記憶體指定同時執行的程序數量,其他程序屬於掛起狀態

from multiprocessing import process,pool

import time

import os

def foo(i):

time.sleep(1)

print 'in process',os.getpid()

return i + 100,'a'

def bar(arg): #**

print 'exec done',arg,os.getpid()

if __name__ == '__main__':

pool = pool(processes=3) #允許程序池同時放入程序的數量

print '主程序的id:',os.getpid()

for i in range(10):

print 'end'

pool.close()

pool.join() #必須先關閉程序池再join,順序不能錯,否則程式直接關閉

多程序學習筆記

多程序 什麼是程序。最直觀的就是乙個個pid,官方的說法就 程序是程式在計算機上的一次執行活動 說得簡單點,下面這段 執行的時候 import os import time 此 只能執行於linux unix pid os.fork 建立乙個子程序 print test if pid 0 print...

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教程。在講述多程序之前,先來回顧一下之前學習的多執行緒。對於多執行緒可以簡單的理解成運輸快遞的貨車,雖然在整個運輸快遞的途中有很多貨車參與運輸,但快遞到你手中的時間並不...