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